home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Libris Britannia 4
/
science library(b).zip
/
science library(b)
/
DTP
/
DTP_TEX
/
H220.ZIP
/
MUTEX.ZIP
/
MTEX.TEX
< prev
next >
Wrap
Text File
|
1990-03-06
|
88KB
|
1,977 lines
% %
% Copyright (C) 1986,1987 by Andrea Steinbach and Angelika Schofer %
% %
% %
% 10.11.87 \def\hunkglue ge"andert. (welche Auswirkungen hat das, %
% ausser dass \two... einen Fehler weniger macht???) %
% 16.11.87 \def\intslurwidth ge"andert (vor division += \seminhw %
% 16.11.87 \def\gradientslur ge"andert (vor division += .5\seminhh %
% %
% %
\def\fmtname{MTeX}\def\fmtversion{0.92}
\immediate\write10{MTeX Version 0.92 - Release 16 November 1987}
% %
% INHALTSVERZEICHNIS %
% %
% Allgemeine Vereinbarungen ......................................... 2 %
% Definitionen der neuen Zeichensaetze .............................. 2 %
% Definitionen der neuen Character .................................. 2 %
% Registerdefinitionen: Count,Box,Dimen usw ......................... 3 %
% Registerinitialisierungen ......................................... 6 %
% Punktierung ....................................................... 7 %
% Hilfsfunktionen - Hilfsmacros ..................................... 8 %
% Macros zur Listenerzeugung und Verarbeitung .......................10 %
% Notenlinien und Hilfslinien .......................................11 %
% Taktstriche u. ae. ................................................12 %
% Das Setzen der Versetzungszeichen .................................13 %
% Versetzungszeichen - Eingabemacros ................................14 %
% Noten - Eingabemacros ................................14 %
% Pausen - Eingabemacros ................................14 %
% Wertpunkte ........................................................15 %
% Akkorde - Eingabemacros ................................16 %
% Konstruktion der Noten und Pausen .................................16 %
% Berechnung der Notenhalslaengen ...................................17 %
% Konstruktion der Notenhaelse ......................................18 %
% Das Setzen der Noten ..............................................18 %
% Tonarten und Aufloesung, Notenschluessel und Taktangabe ...........19 %
% Die Verarbeitung der Nachbarschaften ..............................20 %
% Die Initialisierung der Listen einer Notengruppe ..................20 %
% Abarbeitung und Setzen einer Notengruppe ..........................21 %
% Verbalkung - Eingabemacros ........................................21 %
% Berechnungen der Halslaengen und Steigung .........................22 %
% Plazierung und Zusammensetzung der Balken .........................24 %
% Die Bogen .........................................................25 %
% Akzente fuer Noten und Akkorde ....................................30 %
% Textunterlage .....................................................31 %
% Zweistimmige Notation in einem System .............................33 %
% Beginn und Ende ...................................................33 %
% Defaults ..........................................................34 %
% %
% %
% (Seitennummern bei Druck des Makropakets mit 60 Zeilen je Seite) %
% %
% %
% %
% %
% %
% %
% %
% %
% %
% %
% %
% %
% %
% %
\catcode`@=11
% ************************************************** %
% * Allgemeine Vereinbarungen * %
% ************************************************** %
\frenchspacing
%\parindent 0pt
% Parameter fuer Notensatz
\def\inisong{\linepenalty10%\linepenalty100
\pretolerance=-1
\tolerance=200
\finalhyphendemerits=-1000
\hyphenpenalty=-1000
\exhyphenpenalty=-100
\doublehyphendemerits=-1000
\adjdemerits=1000
\adjdemerits=250
\interlinepenalty=-10 \inidefaults}%\inidefaults siehe DEFAULTS
%\parfillskip0pt
% Dimensionen die in PLAIN TEX eingefuehrt wurden
%\newdimen\p@ \p@=1pt % this saves macro space and time
%\newdimen\z@ \z@=0pt % can be used both for 0pt and 0
%\newskip\z@skip \z@skip=0pt plus0pt minus0pt
%\newbox\voidb@x % permanently void box register
% ************************************************** %
% * Definition der neuen Zeichensaetze * %
% ************************************************** %
\font\music=music16 %Noten
\font\smallmusic=music16 %Noten(im Moment noch mit
%\music identisch
\font\beamfont=beam16 %Balken
\font\slurfont=slur16 %Bogen
\font\slurfontuu=sluruu16 %Bogen
\font\slurfontud=slurud16 %Bogen
\font\slurfontdu=slurdu16 %Bogen
\font\slurfontdd=slurdd16 %Bogen
\font\eightrm =cmr8
% ************************************************** %
% * Definition der neuen Character * %
% ************************************************** %
\catcode`\"=12
\def\hex{"} % zum Eingeben von Zahlen in hex
\def\3{\char"19{}}
\catcode`\"=\active %Unlaute
\def"{\accent'177}
%
\chardef\quart=\hex21 %Notenkoepfe
\chardef\half=\hex22
\chardef\whole=\hex23
\chardef\eighthup=\hex28 %Faehnchen
\chardef\eighthdown=\hex2D
\chardef\sixteenthup=\hex29
\chardef\sixteenthdown=\hex2E
\chardef\thirtytwoup=\hex2A
\chardef\thirtytwodown=\hex2F
\chardef\sixtyfourup=\hex2B
\chardef\sixtyfourdown=\hex30
\chardef\hundredtwentyeightup=\hex2C
\chardef\hundredtwentyeightdown=\hex31
\chardef\wholerest=\hex3C %Pausen
\chardef\halfrest=\hex3D
\chardef\quartrest=\hex3E
\chardef\eighthrest=\hex3F
\chardef\sixteenthrest=\hex40
\chardef\doublerest=\hex3A %Taktpausen
\chardef\ddoublerest=\hex3B
\chardef\fermateup=\hex50 %Fermaten
\chardef\fermatedown=\hex51
\chardef\mflat=\hex32 %Versetzungszeichen
\chardef\mdoubleflat=\hex33
\chardef\mquartflat=\hex37
\chardef\mthreequartflat=\hex3A
\chardef\msharp=\hex34
\chardef\mdoublesharp=\hex35
\chardef\mnatural=\hex36
\chardef\mviolin=\hex47 %Notenschluessel
\chardef\mviolinoct=\hex47
\chardef\mviolinOct=\hex47
\chardef\mbass=\hex49
\chardef\mbassoct=\hex49
\chardef\mbassOct=\hex49
\chardef\mbariton=\hex4D
\chardef\mtenor=\hex4C
\chardef\malt=\hex4B
\chardef\mmezzosopran=\hex4E
\chardef\msopran=\hex4E
\chardef\mC=\hex53 %Taktangaben
\chardef\allabreve=\hex52
\chardef\mCreverse=\hex54
% ************************************************** %
% * Registerdefinitionen * %
% ************************************************** %
%1.Hilfsregister
\newbox\hb@i % Hilfsbox
\newbox\hb@ii % Hilfsbox
\newbox\hb@iii % Hilfsbox
\newbox\hb@iv % Hilfsbox
\newdimen\hd@i % Hilfsdimension
\newdimen\hd@ii % Hilfsdimension
\newdimen\hd@iii % Hilfsdimension
\newcount\hc@i % Hilfscount
\newcount\hc@ii % Hilfscount
\newskip\hs@i % Hilfsskip
\newskip\hs@ii % Hilfsskip
\newskip\hs@iii % Hilfsskip
\newskip\hs@iv % Hilfsskip
\newskip\hs@v % Hilfsskip
\newskip\hs@vi % Hilfsskip
\newskip\hs@vii % Hilfsskip
\newtoks\ht@i % Hilfstokenregister
%2. Boxes fuer Notenkonstruktionen
\newbox\notebox %zum Setzen der Noten
\newbox\leftbox %Akkordnoten links vom Notenhals
\newbox\rightbox %Akkordnoten rechts vom Notenhals
\newbox\dotbox %Wertpunkte fuer Akkorde
\newbox\akzentbox %Akzente
\newbox\hunkbox %Hunks
\newbox\h@nkbox %Hunks im zweidimensionalen Satz
\newbox\legerbox %Hilfslinien
\newbox\firstvoice %erste Stimme bei Zweistimmiger Notation
\newbox\secondvoice %zweite Stimme bei Zweistimmiger Notation
\newbox\placebox %zum Setzen der Taktangabe
\newbox\neighborhood %Box zum Speichern der Nachbarschaft
%3. Tokenregister
\newtoks\notename %Noten- oder Pausenwertname
\newtoks\direction %Richtung des Notenhalses up oder down
\newtoks\d@rection %Richtung des Notenhalses (global)
\newtoks\cleftoks %aktueller Notenschluessel
\newtoks\signtoks %aktuelle Vorzeichnung
\newtoks\canceltoks %aktuelle Aufloesung
\newtoks\slurtoks %zur Bestimmung des Charactercodes fuer Bogen
\newtoks\ta %fuer Listenverarbeitung ....
\newtoks\tb % .... bei \rightappend
%4.Umgebungen
\newif\iffirst %erste Zeile Zeilenanfang: Initialisierung von
%Notenschluessel, Tonart und Taktart
\newif\ifbeam %Verbalkung
\newif\ifchord %Akkord
\newif\ifleft %Plazieren der Akkordnoten links vom Notenhals
\newif\ifstemup %Notenhalsrichtung aufwaerts
\newif\ifgroup %Initialisierung der Nachbarschaftslisten
\newif\iftwo %zweistimmiger Notensatz
\groupfalse\chordfalse\leftfalse\beamfalse\groupfalse\twofalse
%5.Countregister
\newcount\dur@tion
% \dur@tion Notenwert
% 0 1/1
% 1 1/2
% 2 1/4
% 3 1/8
% 4 1/16
% 5 1/32
% 6 1/64
% 7 1/128
\newcount\pitch % interne Tonhoehe
\newcount\pit@ % interne Hilfstonhoehe
\newcount\oldpitch % interne Tonhoehe
\global\oldpitch=0 % Anfangsbelegung
\newcount\maxpitch % maximale interne Tonhoehe bei Akkord
\newcount\minpitch % minimale interne Tonhoehe bei Akkord
\newcount\nn % Anzahl der Hilfslinien
\newcount\clefcount % Parameter Verschieben der Vorzeichnung
% abhaengig von Notenschluessel
\newcount\accpitch % Vozeichnungs Tonhoehe
%Nachbarschaften: Balken- und Bogengruppen
\newcount\tieconst % Konstante fuer Hoehe des Bogenstuecks
% fuer Haltebogen
\newcount\phraseconst % konstantes Bogenstueck bei Phrasierungs-
% bogen
\newcount\n@a % Index 1.Element einer Gruppe
\newcount\n@i % Laufindex in der Gruppe
\newcount\n@e % Index letztes Element einer Gruppe
\newcount\N % Kardinalitaet der Nachbarschaft
\newcount\m@i % Listenindex
\newcount\m@ii % Listenindex
\newcount\L@ % Laenge des Balkens in 0.5pt
\newcount\l@ % zur Zusammensetzung des Balkens
\newcount\m@a\newcount\m@e % Anfangs- und Endindex der Elementliste
% die durch einen Balken verbunden werden
% sollen
\newcount\P@i %lok. pitch, der in endpoint benutzt wird
\newcount\P@a %Anfangspitch
\newcount\P@e %Endpitch
\newcount\beamrow %Korrektur von vpos bei mehrfachverb.
\newcount\S % Steigung
\newcount\S@ % Absolutbetrag der Steigung
\newcount\slurwidth % Ganzzahlige Breite eines Bogens in
% Einheiten von \nhw
\newcount\V@int % Ganzzahlige Hoehe eines Bogens in
% Einheiten von 1/2\nhh
\newcount\CODE % Charcode Steigung von Balken
\newcount\flaga % Werte 0,1,2 Bogenanfang
\newcount\flagb % Werte 0,1,2 Bogenende
\newcount\flagc % Balkensteigung = 0 ja/nein
%6.Dimensionsregister
%Konstanten
\newdimen\linethickness % Dicke einer Notenlinie
\newdimen\nhh % Linienabstand, noteheadheight
\newdimen\nhw % Notenkopfbreite, noteheadwidth
\newdimen\seminhh % halber Linienabstand = 1/2\nhh
\newdimen\seminhw % halbe Notenkopfbreite = 1/2\nhw
\newdimen\twonhh % = 2\nhh
\newdimen\I@@ % = 100pt
\newdimen\stemwidth % = 2\linethickness
\newdimen\beamthickness % = 0.6 \nhh
\newdimen\staffheight % = 4\nhh + \linehight
\newdimen\textline % = \staffheigth, Abstand Schriftlinie --
% Grundlinie bei Textunterlage
\newdimen\linekern % \nhh - \linethickness,kern zw.den Zeilen
\newdimen\Linekern % \nhh -2\linethickness,kern zw.den Zeilen
% bei Hilfslinien
\newdimen\dotwd % Breite eines Verlaengerungspunktes
\newdimen\smkern % kleiner Kern zur Korrektur vor und
% nach Notenkoepfen (Hilfslinien)
%Parameter
\newdimen\yshift % dimen!, um die die Vorzeichen verschoben
% werden in Y-Richtung!
\newdimen\nyshift % dimen!, um die die NOTENbox verschoben
% wird in Y-Richtung!
\newdimen\lyshift % dimen!, um die die LEGERbox verschoben
% wird in Y-Richtung!
\newdimen\akzent@pos %vertikale Positionierung eines
%Artikulationszeichens
%Nachbarschaften: Balken- und Bogengruppen
\newdimen\s@a %Anfangstemlength
\newdimen\s@e %Endstemlength
\newdimen\minsl %untere Grenze f. Stemverkuerzung
\newdimen\R@i % rel. Hoehe des Notenkopfes pitch*seminhh
\newdimen\E@a % Endpunkt des Notenhalses Anfangsnote
% pitch*seminhh +(-)stemlength
\newdimen\R@a % rel. Hoehe des Notenkopfes pitch*seminhh
\newdimen\E@e % Endpunkt des Notenhalses Endnote
% pitch*seminhh +(-)stemlength
\newdimen\R@e % relative Hoehe des Notenkopfes
\newdimen\s@i %lok. stemlength, in endpoint
\newdimen\Abs %Absoluter Abstand zwischen 2 Endpunkten
\newdimen\corr %Korrekturwert fuer 2. Stem
\newdimen\sl@c %4.Korrekturwert fuer Stemlaengen
\newdimen\EP@ %Endpunkt des ersten Stems einer Notengr.
\newdimen\EP@i %Endpunkt des Stems innerhalb einer Gruppe
\newdimen\E@l % Unterer Startpunkt fuer Bogenansatz
\newdimen\E@u % oberer Startpunkt fuer Bogenansatz
\newdimen\H@e % horizontaler Abstand zwischen zwei Noten
\newdimen\H@a % Korrekturwert zur Berechnung von H@e
\newdimen\H@a@cor % Korrekturwert zur Berechnung der Laenge
% Balkens oder Bogens (bzgl. H@list)
\newdimen\H@e@cor % Korrekturwert zur Berechnung der Laenge
% Balkens oder Bogens (bzgl. H@list)
\newdimen\limit %\limit = 0.45\H@e=Grenzwert
\newdimen\V@ %vertikaler Abstand zwischen zwei Noten
\newdimen\gradfactor %= 0.005\S\p@
\newdimen\SHIFT
\newdimen\slurcor % horizontal Kern fuer Bogenpositionierung
\newdimen\H@m@a % Horizontaler Abschnitt von m@a
\newdimen\L@a % Balkenlaenge
\newdimen\V@a % vertikale Position des Balkens
\newdimen\stemlength % Laenge des Notenhalses
\newdimen\linelength % Laenge der Notenlinien
%Textunterlage
\newdimen\overtext % fuer Textueberlage
\newdimen\undertext % fuer Textunterlage
%6. Skipregister
% Ausschlussparamter
\newskip \NOTEskip % Glue nach ganzer Note
\newskip \Noteskip % Glue nach halber Note
\newskip \noteskip % Glue nach 1/4 Note
\newskip \notEskip % Glue nach 1/8 Note
\newskip \noTEskip % Glue nach 1/16 Note
\newskip \nOTEskip % Glue nach 1/32 Note
\newskip \nOteskip % Glue nach 1/64 Note
\newskip \nOtEskip % Glue nach 1/128 Note
\newskip \ruleskip % Glue nach Rules
\newdimen\hunkskip % Glue fuer Hunks
\newskip\oldskip % aktueller \spaceskip vor Nachbarschaft
% ************************************************** %
% * Registerinitialisierungen * %
% ************************************************** %
\beamfont \beamthickness = 1ex
\music \nhh = 1ex \nhw = 1em
\seminhh = 0.5\nhh \seminhw = 0.5\nhw
\twonhh = 2 \nhh
\I@@ = 100 pt
\linethickness = 0.15pt
\stemwidth = 2\linethickness
\staffheight = 4 \nhh \advance\staffheight by \linethickness
\linekern = \nhh \advance\linekern by-\linethickness
\Linekern = \nhh \advance\Linekern by-2\linethickness
\overtext =\staffheight \advance\overtext by\nhh
\def\u@text{\relax}\def\l@text{\relax}
\textline =\staffheight
\undertext =\textline
\tieconst = 4 \phraseconst = 2
\def\up@{up}\def\down@{down}
% ************************************************** %
% * Punktierung * %
% ************************************************** %
%1.Ausschluss-schemata
\let\sk=\spaceskip
%\ruleskip = \seminhw plus \seminhw minus 0.5\seminhw
\ruleskip = \nhw plus \seminhw minus \seminhw
\smkern = 0.2\nhw \relax
\def\hsmall{%hader
\Noteskip 3\nhw plus 2\seminhw minus 2\seminhw
\NOTEskip = \Noteskip
\noteskip 2\nhw plus 1.5\seminhw minus 1.5\seminhw
\notEskip 1\nhw plus \seminhw minus \seminhw
\noTEskip \z@ plus 0.5\seminhw minus \z@
\nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip
\hunkskip \z@\relax}
\def\small{%
\Noteskip 3.5\nhw plus 1.8\seminhw minus 1.8\seminhw
\NOTEskip = \Noteskip
\noteskip 2.5\nhw plus 1.4\seminhw minus 1.4\seminhw
\notEskip 1.5\nhw plus \seminhw minus \seminhw
\noTEskip \seminhw plus 0.6\seminhw minus 0.6\seminhw
\nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip
\hunkskip \z@ \relax}
\def\universal{%
\Noteskip 4\nhw plus 1.6\nhw minus 1.6\nhw
\NOTEskip = \Noteskip
\noteskip 3\nhw plus 1.3\nhw minus 1.3\nhw
\notEskip 2\nhw plus \nhw minus \nhw
\noTEskip \nhw plus 0.6\nhw minus 0.6\nhw
\nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip
\hunkskip \z@ \relax}
\def\wide{%
\Noteskip 4\nhw plus 1.42\nhw minus 1.42\nhw
\NOTEskip = \Noteskip
\noteskip 3.5\nhw plus 1.28\nhw minus 1.28\nhw
\notEskip 2.5\nhw plus \nhw minus \nhw
\noTEskip 1.5\nhw plus 0.9\nhw minus 0.9\nhw
\nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip
\hunkskip \z@ \relax}
\def\loose{%
\Noteskip 5\nhw plus 1.5\nhw minus 1.5\nhw
\NOTEskip = \Noteskip
\noteskip 4\nhw plus 1.25\nhw minus 1.25\nhw
\notEskip 3\nhw plus \nhw minus \nhw
\noTEskip 2\nhw plus 0.75\nhw minus 0.75\nhw
\nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip
\hunkskip \z@\relax}
%1.Glue-Makros
\def\hunkglue{\hunkskip=\sk\relax\advance \hunkskip by -\wd\hunkbox
\ifdim\hunkskip>\z@ \hunkskip=\wd\hunkbox\relax
% \else \hunkskip=\sk \advance\hunkskip-\seminhw\relax \fi}%schm 10.11.87
\else \hunkskip=\sk \relax \fi}%schm 10.11.87
%Glue vor einer Rule (Taktstrich etc.)
\def\gluebrule{\hunkglue\nobreak\ \hskip-\hunkskip\box\hunkbox%
\u@text\l@text\nobreak}
%Glue vor einer Taktangabe
\def\gluebmeter{\hunkglue\kern\seminhw\nobreak\box\hunkbox%
\u@text\l@text\nobreak}
%Glue nach einer Rule (Taktstrich etc.)
\def\gluearule{\-\global\sk\ruleskip}
\def\set@rulesk{\global\sk\ruleskip}
%Glue vor einer Note
\def\sethunkglue{\hunkglue\nobreak\ \hskip-\hunkskip}
%Umbruchm"oglichkeit im Taktinnern
\def\+{\ \-\global\sk=\z@skip}
% ************************************************** %
% * Hilfsfunktionen * %
% ************************************************** %
%entspricht dem von Knuth angegebenen Makro der \loop-Schleife, jedoch
%wird die Schleife bei \else wiederholt.
\def\looop#1\leave{\def\boddy{#1}\iiterate}
\def\iiterate{\boddy \let\nexxt\relax \else\let\nexxt\iiterate\fi \nexxt}
\let\leave=\fi % this makes \looop...\if...\leave skippable
% entspricht |#1 - #2|
\def\distance#1#2{\relax\ifdim#1>#2\relax\Abs=#1\advance\Abs by-#2\relax
\else\Abs=#2\advance\Abs by-#1\relax\fi}
%Notensetzen, z.B. Ineinanderschieben von Hilfslinienbox und Notenbox
%Breite des Boxinhalts wird ignoriert
\def\cbox#1{\hbox to \z@{\hss#1\hss}} % zentriert den Inhalt der Box
\def\hboxnhw#1#2{\hbox to \nhw{\hss\cbox{#1}\cbox{#2}\hss}}
%Box der Breite eines Notenkopfes
\def\ignore#1{\hbox to \z@{\hss#1}} % entspricht \llap in PLAIN
%z.B. fuer Oktavierung des Versetzungszeichen
%Rules fuer Phrasierungen
\def\r@lef@ill#1{\leaders\hrule height \z@ depth #1 \relax\hfill}
\def\r@lef@ll#1{\leaders\hrule height #1 depth \z@ \relax\hfill}
%zum Setzen der Phrasierungsboegen
\def\vt@@#1{\vtop to\z@{\offinterlineskip\null\hbox{#1}\vss}}
\def\vb@@#1{\vbox to\z@{\offinterlineskip\vss\hbox{#1}\null}}
% Korrekturfunktionen fuer Berechnung der Halslaenge
\def\corra#1{\relax \ifdim\Abs>\seminhh
\ifdim#1>\minsl \advance #1 by -\seminhh\fi
\fi}
%1. Verkuerzung, des hoeherliegenden(stemup) bzw. tieferliegenden
%(stemdown) Notenhalses um \seminhh falls moeglich(Abstand>\seminhh)
\def\corrb#1{\advance #1 by \corr}
%2. Verlaengerung des anderen Notenhalses um Hoechstabstand zu
%erreichen
\def\corrc#1{\advance #1 by \seminhh}
%3. p1^=p2 Abstand =0 : Verkuerzung des Notenhalses der tiefer (hoeher)
%gelegenen Note um \seminhh
%
%Funktionen die die vertikalen Abstaende
%der Bogenendpunkte von der Grundlinie berechnen
%dabei ist E@u der Ansatz des oberhalb verlaufenden Bogens
%und E@l der Ansatz des unterhalb verlaufenden Bogens
%Punkte fuer Akkorde (oberhalb/unterhalb)
\def\chordupperstartpoints{%
\global\E@u\maxpitch\seminhh \global\advance\E@u\nhh
\ifdim\E@u<\z@ \global\advance \E@u-\I@@
\else \global\advance \E@u \I@@ \fi}
\def\chordlowerstartpoints{%
\global\E@l\minpitch\seminhh \global\advance\E@l-\nhh
\ifdim\E@l<\z@ \global\advance \E@l-\I@@
\else \global\advance \E@l \I@@ \fi}
\def\whatisnewstartpoint{%
\ifdim\E@a=\z@ \global\E@a = 1sp \fi
\ifstemup\relax
\expandafter\exchange\the\E@a\in\uslurlist\at \n@a
\else \relax
\expandafter\exchange\the\E@a\in\lslurlist\at \n@a
\fi
}
%neue Ansatzwerte E@l E@u berechnen und an \n@i-te Stelle der
% \lslurlist bzw. \uslurlist setzen (NACH Balkenberechnung)
\def\whatarenewstartpoints{%
\ifdim\EP@i=\z@ \global\EP@i = 1sp \fi
\ifstemup\relax
\expandafter\exchange\the\EP@i\in\uslurlist\at \n@i
\else \relax
\expandafter\exchange\the\EP@i\in\lslurlist\at \n@i
\fi
}
% belegt #2 mit dem Endpunkt des Notenhalses des #1-ten Elementes der
% Notengruppe
\def\getendpoint#1#2{\relax\hc@i=#1%
\lokalassign\hc@i\of\H@list\to\hd@i
\lokalassign\hc@i\of\H@corlist\to\hd@ii
\select\hc@i\of\dir@list\to\dir@i
\ifx\dir@i\down@ \advance\hd@ii\nhw \fi
\advance\hd@i by-\hd@ii
\advance\hd@i by-\H@a \multiply\hd@i by\S \hd@i=0.01 \hd@i
\advance\hd@i by\EP@ %EP@ = Endpunkt @ n@a
\global#2=\hd@i}
%
% Weist \S die im Balken- / Bogenfont vorhandene Steigung zu
\def\addC{\global\advance\CODE by }
\def\assignS{%
\ifnum\S<0 \S@=-\S \else \S@=\S \fi
\ifnum\S@< 1 \S@=0 \else
\ifnum\S@< 8 \S@=5 \else
\ifnum\S@<12 \S@=10 \else
\ifnum\S@<17 \S@=15 \else
\ifnum\S@<22 \S@=20 \else
\ifnum\S@<27 \S@=25 \else
\ifnum\S@<32 \S@=30 \else
\ifnum\S@<40 \S@=35 \else \S@=45\fi\fi\fi\fi\fi\fi\fi\fi
\ifnum\S<0\global\S=-\S@ \else\global\S=\S@\fi}
% Berechnet den Code der Steigung im Bogenfont
\def\assignCODE{%
\ifnum\S< 0 \global\CODE = 64 \S@ = -\S \else \S@ = \S
\global\CODE = 0 \fi
\ifnum\S@< 6 \addC 0 \else
\ifnum\S@<11 \addC 8 \else
\ifnum\S@<16 \addC16 \else
\ifnum\S@<21 \addC24 \else
\ifnum\S@<26 \addC32 \else
\ifnum\S@<31 \addC40 \else
\ifnum\S@<36 \addC48 \else
\ifnum\S@<46 \addC56 \fi\fi\fi\fi\fi\fi\fi\fi}
%Im Moment benutzte Steigungen
%5 10 15 20 25 30 35 45
\def\assignuslurchar{\hc@i=\slurwidth
\ifnum\V@int= 0 %\V@=\z@
\ifnum\hc@i>1 \advance\hc@i-2 \else \advance\hc@i-1 \fi
\edef\slurchar{\the\hc@i}%
\else
\ifnum\slurwidth<4 \multiply\hc@i\slurwidth
\advance\hc@i-\slurwidth\advance\hc@i\V@int\advance\hc@i-1
\multiply\hc@i8\edef\slurchar{\the\hc@i}%
\else\advance\hc@i-2 \hc@ii=\V@int\advance\hc@ii-1
\ifodd\hc@i\divide\hc@i2
\edef\slurchar{\noexpand'1\the\hc@ii\the\hc@i}%
\else \divide\hc@i 2 \edef\slurchar{\noexpand'\the\hc@ii\the\hc@i}\fi
\fi
\fi\slurtoks=\expandafter{\slurchar}}
\def\assignlslurchar{\hc@i=\slurwidth
\ifnum\V@int= 0 %\V=\z@
\ifnum\hc@i>1\advance\hc@i14 \else\advance\hc@i15 \fi
\edef\slurchar{\the\hc@i}%
\else
\ifnum\slurwidth<4 \multiply\hc@i by \slurwidth
\advance\hc@i-\slurwidth\advance\hc@i\V@int\advance\hc@i-1
\multiply\hc@i8\edef\slurchar{\noexpand\the\hc@i}%
\else\advance\hc@i-2\hc@ii=\V@int\advance\hc@ii-1
\ifodd\hc@i\divide\hc@i2
\edef\slurchar{\noexpand'1\the\hc@ii\the\hc@i}%
\else \divide\hc@i2 \edef\slurchar{\noexpand'\the\hc@ii\the\hc@i}\fi
\fi
\fi\slurtoks=\expandafter{\slurchar}}
% ************************************************** %
% * Macros zur Listenerzeugung und Verarbeitung * %
% ************************************************** %
%\newtoks\ta\newtoks\tb
%Haengt an Liste #2 ein neues Element mit Inhalt #1 an
\long\def\rightappend#1\to#2{\ta={\\{#1}}\tb=\expandafter{#2}%
\edef#2{\the\tb\the\ta}}
%Weist dem Register (Counter oder Dimension oder Skip ) den Wert des
%#1-ten Elementes der Liste #2 zu (lokal bzw. global)
\def\assign#1\of#2\to#3{\m@i=#1\relax
\long\def\\##1{\advance\m@i-1\relax % globale Zuweisung
\ifnum\m@i=0\relax\global#3=##1\fi}#2\relax}
%
\def\lokalassign#1\of#2\to#3{\m@i=#1\relax % lokale Zuweisung
\long\def\\##1{\advance\m@i-1\relax\ifnum\m@i=0\relax#3=##1\fi}#2\relax}
%
%Definiert die Kontrollsequenz #3 als den Inhalt des
%#1-ten Elementes der Liste #2 zu (lokal).
\def\select#1\of#2\to#3{\m@i=#1\relax % lokale Zuweisung
\long\def\\##1{\advance\m@i-1\relax\ifnum\m@i=0\relax\def#3{##1}\relax
\fi}#2\relax}
%
%setzt #1=Anzahl der Elemente einer Liste
\def\cardinality#1\to#2{#2=0\long\def\\##1{\advance#2 by 1 }#1}
%
%Tauscht in Liste #2 den Inhalt des #3-ten Elementes gegen #1 aus.
\def\exchange#1\in#2\at#3{\m@i=#3\long\def\\##1{\advance\m@i-1
\ifnum\m@i=0 \rightappend{#1}\to\helplist
\else\rightappend##1\to\helplist\fi}#2%
\let\hhelplist=\helplist\global\let#2=\hhelplist\let\helplist=\empty
}
%abhaengig von der Notenkonstellation Abfrage auf \S=0
\def\gradz@\in#1\with#2#3\from#4\to#5{\m@i=#4\m@ii=#5\relax
\advance\m@i 1 \advance\m@ii -1
\long\def\\##1{\advance\m@i-1\advance\m@ii-1
\ifnum\m@i<1 \ifnum\m@ii>-1 \hc@i=##1\relax
\ifnum\hc@i#2#3 \relax \else
\global\flagc=0 \ifnum\hc@i#2 4 \relax \else \global\minsl=\twonhh\fi
\fi\fi\fi}#1}
%
%addiert den Wert von \sl@c zum Wert in Liste #1 von Element #2 bis #3
\def\addslc\in#1\from#2\to#3{\m@i=#2\m@ii=#3\long\def\\##1{\advance\m@i-1
\advance\m@ii-1
\ifnum\m@i<1 \ifnum\m@ii>-1 \hd@i=##1 \advance\hd@i\sl@c
\expandafter\rightappend\the\hd@i\to\helplist\else
\rightappend##1\to\helplist\fi\else\rightappend##1\to\helplist\fi}#1%
\let\hhelplist=\helplist\global\let#1=\hhelplist\let\helplist=\empty}
%
%wechselt die Richtungen der Notenh"alse in der \dir@list vom
%#2-ten bis zum #3-ten Element gegen #1 aus.
\def\putdir#1\from#2\to#3{\m@i=#2\m@ii=#3\def\helplist{}%
\long\def\\##1{\advance\m@i-1
\advance\m@ii-1
\ifnum\m@i<1 \ifnum\m@ii>-1
\expandafter\rightappend#1\to\helplist\else
\rightappend##1\to\helplist\fi\else\rightappend##1\to\helplist\fi}%
\dir@list%
\let\hhelplist=\helplist\global\let\dir@list
=\hhelplist\let\helplist=\empty}
%
%Ersetzt den Inhalt des #4-ten Elementes der Liste #3 durch
%#1 Inhalt #2
\def\additem#1#2\in#3\at#4{\m@i=#4\long\def\\##1{\advance\m@i-1 \relax
\ifnum\m@i=0\ht@i{##1}\edef\h@@@{#1\the\ht@i#2}\expandafter
\rightappend\h@@@\to\helplist\else\rightappend##1\to\helplist\fi}#3%
\let\hhelplist=\helplist\global\let#3=\hhelplist\let\helplist=\empty
}
% ************************************************** %
% * Notenlinien und Hilfslinien * %
% ************************************************** %
\def\nobaselines{\baselineskip=\z@ \lineskip=\z@ \lineskiplimit=\z@}
%\baselinesa und \baselinesb = zwei Verschiedene M"oglichkeiten f"ur
% die Interline Glue Wahl.
\def\baselinesa{%
\baselineskip=2\staffheight plus \staffheight minus .5\staffheight
\lineskip=0.5\staffheight plus \staffheight minus .5\staffheight
\lineskiplimit=0.5\staffheight}
\def\baselinesb{%
\baselineskip=3\staffheight plus \staffheight minus .5\staffheight
\lineskip=0.5\staffheight plus \staffheight minus .5\staffheight
\lineskiplimit=0.5\staffheight}
%Notenlinie
\def\hr{\hrule height\linethickness depth \z@ width \linelength}
%Notenlinie und Zwischenraum
\def\hrv{\hr\kern\linekern}
%Hilfslinie
\def\HRULE{\hrule height\linethickness depth\linethickness width \twonhh}
%Hilfslinie und Zwischenraum fuer Hilfslinien unterhalb des Systems
\def\KHR{\kern\Linekern\HRULE}
%Hilfslinie und Zwischenraum fuer Hilfslinien oberhalb des Systems
\def\HRK{\HRULE\kern\Linekern}
%Liniensystem
\def\lines{\linelength=\hsize
\hbox to \z@{\vbox{\hrv\hrv\hrv\hrv\hr}\hss}}
%Liniensystem fuer erste Zeile unter Ber"ucksichtigung des \parindent
\def\firstlines{\hbox to \z@{\linelength=\hsize\advance\linelength by
-\parindent \vbox{\hrv\hrv\hrv\hrv\hr}\hss}}
%
%macros, die die Hilfslinienbox herstellen zur zugeho"rigen Note
%\nn = Anzahl der ben"otigten Hilfslinien
%formel: \pitch<0 \nn=-\pitch/2, \pitch>8 \nn=(\pitch-8)/2, \nn=0 sonst
\def\legerlines{\leger@cal\ifnum\nn=0 \global\setbox\legerbox\null%
\else\relax\ifnum\pitch<0 \global\setbox\legerbox=\vtop{\leger@line}%
\else\global\setbox\legerbox=\vbox{\leger@line}\fi\fi}
\def\leger@line{\begingroup \loop \ifnum \nn>0 \aftergroup \HR
\advance\nn-1 \repeat \endgroup}
\def\leger@cal{\ifnum\pitch<-1 \nn =-\pitch \lyshift =\z@ \let\HR=\KHR
\else\relax\ifnum\pitch<10 \nn = 0 \lyshift =\z@
\else\nn=\pitch\advance\nn-8 \lyshift=4\nhh%\staffheight-\linethickness
\let\HR=\HRK
\fi\fi \divide \nn by 2 }
%Hilfslinien bei Akkorden
\def\chordlegerlines{%
\ifleft
\global\setbox\leftbox=
\hboxnhw{$\raise\lyshift\box\legerbox$}{\box\leftbox}%
\else
\global\setbox\rightbox=
\hboxnhw{$\raise\lyshift\box\legerbox$}{\box\rightbox}%
\fi}
% ************************************************** %
% * Taktstriche u. a". * %
% ************************************************** %
%Striche
%Atemzeichen
\def\caesurasign{\vrule height4.5\nhh depth-3.5\nhh width3\linethickness}
%schmaler Strich: Taktstrich
\def\thinvrule{\vrule height\staffheight depth \z@ width2 \linethickness}
%dicker Strich:
\def\thickvrule{\vrule height\staffheight depth \z@ width 0.5\nhh}
%Doppelpunkt fuer Wiederholungszeichen:
\def\doppelpunkt{%
\hbox{\vrule height 2.6\nhh depth-2.4\nhh width 0.2\nhh\kern-0.2\nhh
\vrule height 1.6\nhh depth-1.4\nhh width 0.2\nhh}}
%zu Taktstrichen zusammengesetzte Striche:
\def\doppelstrich{\thinvrule\kern.25\nhw\thinvrule}
\def\schlussstrich{\thinvrule\kern\seminhw\thickvrule}
%wiederholungszeichen mit Doppelpunkt links
\def\repstrich{\doppelpunkt\kern\seminhw
\thinvrule\kern\seminhw\thickvrule}
%wiederholungszeichen mit Doppelpunkt rechts
\def\revrepstrich{\thickvrule\kern\seminhw\thinvrule\kern\seminhw
\doppelpunkt}
%
%taktstriche mit Glue
\def\|{\gluebrule\thinvrule\gluearule}
\def\={\gluebrule\schlussstrich\gluearule\null}
\def\doublebarline{\gluebrule\doppelstrich\gluearule\null}
\def\rightrepeat{\gluebrule\repstrich\gluearule\null}
\def\leftrepeat{\gluebrule\thinvrule\-\revrepstrich\nobreak}
\def\leftrightrepeat{\gluebrule\repstrich\-%
\kern-\seminhw\revrepstrich\global\sk\ruleskip}
%
% Makro fuer Orientierungszeichen
\def\boxed#1{\setbox0=\hbox{$\displaystyle{#1}$}\hbox{\lower.4pt\hbox{\lower
3pt\hbox{\lower 1\dp0\hbox{\vbox{\hrule height .4pt \hbox{\vrule width
.4pt \hskip 3pt\vbox{\vskip 3pt\box0\vskip3pt}\hskip 3pt \vrule width
.4pt}\hrule height .4pt}}}}}}
%Kaesten
\def\1#1\2#2\*{\def\f@rsttime{#1*}\def\s@condtime{#2*}%
\expandafter\evalfirst\f@rsttime!!!%
\ifx\interim\empty \nobreak\box@@@\else
\looop\expandafter\evalinterim\interim!!!%
\ifx\interim\empty\relax\nobreak\box@@@\leave\fi
\expandafter\evalsecond\s@condtime!!!%
\ifx\interim\empty \relax\else
\looop\expandafter\evalinterim\interim!!!%
\ifx\interim\empty\relax\leave\fi
}
\def\evalfirst#1*#2!!!{\def\interim{#2}\penalty-1000\box@{#1}}
\def\evalinterim#1*#2!!!{\def\interim{#2}\penalty-1000\box@@{#1}}
\def\evalsecond#1*#2!!!{\def\interim{#2}\penalty-1000\box@@@@{#1}}
\def\box@#1{\let\setlines\relax\gluebrule
\vbox{\halign{##\cr\repbox{1.}\r@lef@ll{\linethickness}\cr
\noalign{\nointerlineskip}%
\repstrut\thinvrule\gluearule#1\cr}}%
\let\setlines=\s@tlines}
\def\box@@#1{\let\setlines\relax
\vbox{\halign{##\cr\r@lef@ll{\linethickness}\cr
\noalign{\nointerlineskip}\repstrut#1\cr}}%
\let\setlines=\s@tlines}
\def\box@@@{\vbox{\halign{##\cr\r@lef@ll{\linethickness}\repbox{}\cr
\noalign{\nointerlineskip}%
\repstrut\setgluebrule\doppelpunkt\kern\seminhw\thinvrule\cr}}}
\def\box@@@@#1{\let\setlines\relax\vbox{\tabskip\seminhw
\halign{##\tabskip\z@\cr
\repbox{2.}\r@lef@ll{\linethickness}\cr
\noalign{\nointerlineskip}%
\repstrut\thickvrule\setgluearule#1\cr}}%
\let\setlines=\s@tlines}
\def\repbox#1{\vtop to\z@{\null\nointerlineskip
\hbox to \z@{\vrule height10pt depth -\nhh width\stemwidth{#1}\hss
}\vss}}
\def\repstrut{\vrule width \z@ height 7\nhh depth\z@}
\def\overstrut{\vrule width \z@ height 6\nhh depth\z@}
%\let\overstrut=\repstrut
%
% ************************************************** %
% * SETZEN der VERSETZUNGSZEICHEN * %
% ************************************************** %
%Setzen der Versetzungszeichen vor Noten:
\def\setvorz#1{\relax\setbox \hunkbox=\hbox{\unhbox\hunkbox%
\global\advance\oldpitch-7 \yshift=\pitch\seminhh
\ifnum\oldpitch=\pitch$\raise\yshift\hbox to \z@{\hss\music#1}$\else
$\raise\yshift\hbox{\music#1}$\fi}\global\oldpitch=\pitch}
%Setzen der Versetzungszeichen in der Vorzeichnung:
\def\setsign#1#2{\hc@i=#1 \advance\hc@i by \clefcount
\ifnum\hc@i<-1 \advance\hc@i7 \else\ifnum\hc@i>9 \advance\hc@i-7 \fi\fi
$\raise\hc@i\seminhh\hbox{\music#2}$}
%Atemzeichen
\def\caesura{\setbox\hunkbox=\hbox{\unhbox\hunkbox%
\kern\p@\caesurasign\kern\nhh}}
% ************************************************** %
% * Versetzungszeichen - Eingabemacros * %
% ************************************************** %
%\x=\sharp Kreuz
%\xx= Doppel-Kreuz
%\n=\natural Aufloesungszeichen
%\b=\flat
%\bb=Doppel-Be
\def\x#1{\global\pitch=#1\relax\setvorz{\msharp}}
\def\xx#1{\global\pitch=#1\relax\setvorz{\mdoublesharp}}
\def\n#1{\global\pitch=#1\relax\setvorz{\mnatural}}
\def\b#1{\global\pitch=#1\relax\setvorz{\mflat}}
\def\bb#1{\global\pitch=#1\relax\setvorz{\mdoubleflat}}
%Versetzungszeichen in der Vorzeichnung
\def\b@#1{\setsign{#1}{\mflat}}
\def\x@#1{\setsign{#1}{\msharp}}
\def\n@#1{\setsign{#1}{\mnatural}}
% ************************************************** %
% * NOTEN - Eingabemacros * %
% ************************************************** %
%ganze
\def\g#1{\global\pitch=#1\setnotes{NOTE}}
%halbe
\def\h#1{\global\pitch=#1\setnotes{Note}}
%viertel
\def\v#1{\global\pitch=#1\setnotes{note}}
%achtel
\def\a#1{\global\pitch=#1\setnotes{notE}}
%sechzehntel
\def\s#1{\global\pitch=#1\setnotes{noTE}}
%zweiunddreissigstel
\def\z#1{\global\pitch=#1\setnotes{nOTE}}
%vierundsechzigstel
\def\d#1{\global\pitch=#1\setnotes{nOte}}
%hundertachtundzwanzigstel
\def\o#1{\global\pitch=#1\setnotes{nOtE}}
% ************************************************** %
% * PAUSEN - Eingabemacros * %
% ************************************************** %
%Pausen erhalten \pitch = 5 zum Setzen der Wertpunkte im 3. Zwischenraum
\def\sethunks{\sethunkglue\box\hunkbox\u@text\l@text}
%ganze
\def\pg{\ifdim\spaceskip=\ruleskip \global\sk=\NOTEskip\fi
\sethunks\PAUSE\global\pitch=5\global\nyshift=\pitch\seminhh
\nobreak\global\sk=\NOTEskip}
%zwei Pausentakte
\def\dpd{\ifdim\spaceskip=\ruleskip \global\sk=\NOTEskip\fi
\sethunks{\music
\doublerest}\global\pitch=5\global\nyshift=\pitch\seminhh
\nobreak\global\sk=\NOTEskip}
%drei Pausentakte
\def\dpg{\ifdim\spaceskip=\ruleskip \global\sk=\NOTEskip\fi
\sethunks{\music\doublerest}\hskip\nhh
\PAUSE\global\pitch=5\global\nyshift=\pitch\seminhh
\nobreak\global\sk=\NOTEskip}
%vier Pausentakte
\def\dpdd{\ifdim\spaceskip=\ruleskip \global\sk=\NOTEskip\fi
\sethunks{\music\ddoublerest}%
\global\pitch=5\global\nyshift=\pitch\seminhh
\nobreak\global\sk=\NOTEskip}
%halbe
\def\ph{\sethunks\Pause\global\pitch=5\global\nyshift=\pitch\seminhh
\nobreak\global\sk\Noteskip}
%viertel
\def\pv{\sethunks\pause\global\pitch=5\global\nyshift=\pitch\seminhh
\nobreak\global\sk\noteskip}
%achtel
\def\pa{\sethunks\pausE\global\pitch=5\global\nyshift=\pitch\seminhh
\nobreak\global\sk\notEskip}
%sechzehntel
\def\ps{\sethunks\pauSE\global\pitch=5\global\nyshift=\pitch\seminhh
\nobreak\global\sk\noTEskip}
%zweiunddreissigstel
\def\pz{\sethunks\paUSE\global\pitch=5\global\nyshift=\pitch\seminhh
\nobreak\global\sk\nOTEskip}
%vierundsechzigstel
\def\pd{\sethunks\pAuse\global\pitch=5\global\nyshift=\pitch\seminhh
\nobreak\global\sk\nOteskip}
%hundertachtundzwanzigstel
\def\po{\sethunks\pAusE\global\pitch=5\global\nyshift=\pitch\seminhh
\nobreak\global\sk\nOtEskip}
% ************************************************** %
% * Wertpunkte * %
% ************************************************** %
%\dotwd wird in einer Notengruppe benoetigt zur Berechnung der Laenge
%des Balkens oder Bogens
\setbox0=\hbox to\seminhw{\rm\kern\p@.\hss}\dotwd=\wd0
%#1 gibt Anzahl der Punkte an.
%- Eingabemacro
\def\.#1{\relax\hc@i=#1\relax
\ifchord\chordjoindots\else\relax\joindots%
\ifgroup\global\advance\H@a@cor by #1\dotwd \fi
\fi}
\def\dotodd{\hbox to \seminhw{\rm\kern\p@.\hss}}%
%Verschieben der Wertpunkte von Noten auf einer Notenlinie in
%......den Zwischenraum oberhalb
\def\dot@up{\hbox{$\raise0.3\nhh
\hbox to \seminhw{\rm\kern\p@.\hss}$}}
%......den Zwischenraum unterhalb der Notenlinie
\def\dot@down{\hbox{$\raise-0.5\nhh
\hbox to \seminhw{\rm\kern\p@.\hss}$}}
%Normalfall: Verschiebung in den oberen Zwischenraum
\def\doteven{\dot@up}
%setzt #1 Punkte bei einzelnen Noten
\def\joindots{\ifodd\pitch\let\punkt\dotodd\else\let\punkt\doteven\fi
$\raise\nyshift\hbox{%\kern\smkern
\begingroup \loop \ifnum \hc@i>0 \aftergroup \punkt
\advance\hc@i-1 \repeat \endgroup}$}
%Wertpukte bei Akkorden
\def\chordjoindots{\global
\setbox\dotbox\hboxnhw{\box\dotbox}{\joindots\unskip}}
% ************************************************** %
% * Akkorde - Eingabemacros * %
% ************************************************** %
\def\lchord#1\endchord{%Initialisierung
\global\maxpitch=-10000\global\minpitch=10000
\sethunkglue\begingroup\chordtrue\lefttrue\stemuptrue
\global\setbox\rightbox=\null\global\setbox\leftbox=\null%
\global\setbox\dotbox\null%
#1\endchord}
%
\def\rchord#1\endchord{%Initialisierung
\global\maxpitch=-10000\global\minpitch=10000
\sethunkglue\begingroup\chordtrue\leftfalse\stemupfalse
\global\setbox\rightbox=\null%
\global\setbox\leftbox=\null\global\setbox\dotbox\null%
#1\endchord}
% ************************************************** %
% * Konstruktion der Noten und Pausen * %
% ************************************************** %
%Bestimmung der zu setzenden Noten und Bestimmung der Halsrichtung
\def\tunedef{\ifchord \relax
\gdef\tune{\csname\the\notename\endcsname}%
\else\ifbeam \relax \else\stemdirectiondef\fi
\gdef\tune{\csname\the\notename\the\direction\endcsname}%
\ifgroup \global\d@rection\expandafter{\the\direction}\fi\fi}
\def\stemdirectiondef{%
\ifnum\pitch<4 \stemuptrue \direction={up}%
\else \stemupfalse \direction={down}\fi}
%
\def\calstemlup#1{\global\dur@tion=#1\relax\stemupeval of \pitch}
\def\calstemldown#1{\global\dur@tion=#1\relax\stemdowneval of \pitch}
%
%ganze noten \NOTEup=\NOTEdown
%
\def\NOTEup{\ifbeam\relax\else\global\stemlength=\z@\fi
\global\dur@tion = 0 \hbox{\music\whole}}
\let\NOTEdown=\NOTEup
\def\NOTE{\hbox{\music\whole}\global\dur@tion = 0}
%
%Halbenoten, Hals aufwaerts , Hals abw"arts gestielt
%
\def\Note{\hbox{\music\half}\global\dur@tion = 1}
\def\Noteup{\ifbeam\relax\else\calstemlup1\fi
\hbox{\music\half \stemup}}
\def\Notedown{\ifbeam\relax\else\calstemldown1\fi
\hbox{\music\stemdown \half}}
%
%Viertelnoten, Hals aufwaerts , Hals abwaerts gestielt
%
\def\noteup{\ifbeam\relax\else\calstemlup2\fi
\hbox{\music\quart\stemup}}
\def\notedown{\ifbeam\relax\else\calstemldown2\fi
\hbox{\music\stemdown\quart}}
\def\note{\hbox{\music\quart}\global\dur@tion= 2}
%
%Achtelnoten, Hals aufwaerts , Hals abwaerts gestielt
%
\def\notE{\hbox{\music\quart}\global\dur@tion= 3}
\def\notEup{\ifbeam\relax\else\calstemlup3\fi
\hbox{\music\quart\flagup{\eighthup}}}
\def\notEdown{\ifbeam\relax\else\calstemldown3\fi
\hbox{\music\flagdown{\eighthdown}\quart}}
%
%Sechzehntelnoten, Hals aufwaerts , Hals abwaerts gestielt
%
\def\noTE{\hbox{\music\quart}\global\dur@tion= 4}
\def\noTEup{\ifbeam\relax\else\calstemlup4\fi
\hbox{\music\quart\flagup{\sixteenthup}}}
\def\noTEdown{\ifbeam\relax\else\calstemldown4\fi
\hbox{\music\flagdown{\sixteenthdown}\quart}}
%
%Zweiunddreissigstelnoten, Hals aufwaerts , Hals abwaerts gestielt
%
\def\nOTE{\hbox{\music\quart}\global\dur@tion= 5}
\def\nOTEup{\ifbeam\relax\else\calstemlup5\fi
\hbox{\music\quart\flagup{\thirtytwoup}}}
\def\nOTEdown{\ifbeam\relax\else\calstemldown5\fi
\hbox{\music\flagdown{\thirtytwodown}\quart}}
%
%Vierundsechzigstelnoten, Hals aufwaerts , Hals abwaerts gestielt
%
\def\nOte{\hbox{\music\quart}\global\dur@tion= 6}
\def\nOteup{\ifbeam\relax\else\calstemlup6\fi
\hbox{\music\quart\flagup{\sixtyfourup}}}
\def\nOtedown{\ifbeam\relax\else\calstemldown6\fi
\hbox{\music\flagdown{\sixtyfourdown}\quart}}
%
%Hundertachtundzwanzigstelnoten, Hals aufwaerts , Hals abwaerts gestielt
%
\def\nOtE{\hbox{\music\quart}\global\dur@tion= 7}
\def\nOtEup{\ifbeam\relax\else\calstemlup7\fi
\hbox{\music\quart\flagup{\hundredtwentyeightup}}}
\def\nOtEdown{\ifbeam\relax\else\calstemldown7\fi
\hbox{\music\flagdown{\hundredtwentyeightdown}\quart}}
% P A U S E N
\def\PAUSE{{\music\wholerest}}
\def\Pause{{\music\halfrest}}
\def\pause{{\music\quartrest}}
\def\pausE{{\music\eighthrest}}
\def\pauSE{{\music\sixteenthrest}}
\def\pauSE{{\music\sixteenthrest}} % bis auf weiteres, da diese im
\def\paUSE{{\music\sixteenthrest}} %Zeichensatz noch nicht
\def\pAuse{{\music\sixteenthrest}} %vorhanden sind.
\def\pAusE{{\music\sixteenthrest}} %
% ************************************************** %
% * Berechnung der Notenhalslaengen * %
% ************************************************** %
\def\min@stemlength{\ifnum\dur@tion>2
\hc@i= 3 \advance\hc@i by \dur@tion \hd@i= \hc@i\seminhh
\ifdim\hd@i>\stemlength \global\stemlength=\hd@i\fi \fi}
%Hals nach oben
\def\stemupeval of #1{\pit@=#1\relax
\ifnum\pit@<-3 \advance\pit@ by -4 \global\stemlength=-\pit@\seminhh
\else\eval@up\fi\ifgroup\relax\else\min@stemlength\fi}
\def\eval@up{\ifnum \pit@<6 \global\stemlength=7\seminhh
\else
\ifnum\pit@<8 \advance\pit@ by-12 \global\stemlength=-\pit@\seminhh
\else \global\stemlength=\twonhh
\fi\fi}
%
\def\stemdowneval of #1{\pit@=#1\relax
\ifnum\pit@>11 \advance\pit@ by -4 \global\stemlength=\pit@\seminhh
\else \eval@down\fi\ifgroup\relax\else\min@stemlength\fi}
\def\eval@down{\ifnum \pit@ > 2 \global\stemlength=7\seminhh
\else\ifnum\pit@ > 0 \advance\pit@ 4 \global\stemlength=\pit@\seminhh
\else \global\stemlength=\twonhh
\fi\fi}
% ************************************************** %
% * Konstruktion der Notenhaelse * %
% ************************************************** %
%Hals nach oben
\def\stemup{\vrule height \stemlength depth\z@ width\stemwidth}
%Hals nach unten
\def\stemdown{\vrule height\z@ depth\stemlength width\stemwidth
\hskip-2\stemwidth}
%Hals nach unten mit Fahne
\def\flagdown#1{\stemdown\ifbeam\relax\else
\vtop to\stemlength{\offinterlineskip\null\vss\hbox{\music#1}\null}\fi}
%Hals nach oben mit Fahne
\def\flagup#1{\stemup\ifbeam\relax\else
\vbox to\stemlength{\offinterlineskip\hbox{\music#1}\vss\null}\fi}
%
%Bestimmung des Notenhalses im Akkord
%
\def\stemdef{%
\ifstemup\edef\stem{\hbox{\ifcase\dur@tion \noexpand\relax
\or\stemup \or\stemup \or\flagup{\eighthup}%
\or\flagup{\sixteenthup}\or\flagup{\thirtytwoup}%
\or\flagup{\sixtyfourup}\or\flagup{\hundredtwentyeightup}%
\else\noexpand\relax\fi}}%
\else\edef\stem{\hbox{\ifcase\dur@tion \noexpand\relax
\or\stemdown \or\stemdown \or\flagdown{\eighthdown}%
\or\flagdown{\thirtytwodown}\or\flagdown{\sixteenthdown}%
\or\flagdown{\sixtyfourdown}\or\flagdown{\hundredtwentyeightdown}%
\else\noexpand\relax \fi}}%
\fi}
% Setzen des Notenhalses im Akkord
\def\setstem{\relax
\ifstemup $\raise\minpitch\seminhh\stem $%
\else $\raise\maxpitch\seminhh\stem $\fi}
% ************************************************** %
% * Das Setzen der Noten * %
% ************************************************** %
\def\setnotes#1{\relax\notename={#1}\global\nyshift=\pitch\seminhh
\legerlines\tunedef
\ifchord\setchord\else \sethunkglue \setnote \fi
}
%einzelne Note
\def\setnote{\global\setbox\notebox=
\hboxnhw{$\raise\lyshift\box\legerbox$}{$\raise\nyshift\hbox{\tune}$}%
\setakzent
\box\hunkbox\kern\smkern\u@text\l@text\box\notebox
\global\spaceskip=\csname\the\notename skip\endcsname\nobreak
% \ifnum\dur@tion=0 \global\H@a@cor =\seminhw\fi
\ifgroup \global \H@a@cor = \z@ \fi
}
%Akkorde
%Zusammenfassung der einzelnen Noten in \leftbox bzw. \rightbox
\def\setchord{%
\ifnum\maxpitch<\pitch \global\maxpitch = \pitch\fi
\ifnum\minpitch>\pitch \global\minpitch = \pitch\fi
\chordlegerlines
\ifleft
\global\setbox\leftbox=
\hboxnhw{\box\leftbox}{$\raise\nyshift\hbox{\tune}$}%
\else
\global\setbox\rightbox=
\hboxnhw{\box\rightbox}{$\raise\nyshift\hbox{\tune}$}\fi
}
%
\def\endchord{%
\nobreak\global\sk=\csname\the\notename skip\endcsname
\ifbeam \relax \else\chordnobeam\fi
\hc@i=\maxpitch \advance\hc@i-\minpitch
\global\advance\stemlength by \hc@i\seminhh
\stemdef
\ifgroup \global\H@a@cor=\z@
\ifstemup
\ifdim\wd\rightbox>\z@ \global\advance\H@a@cor by \nhw \fi
\fi
\global\advance\H@a@cor by \wd\dotbox
\global\d@rection\expandafter{\the\direction}%
\fi
\global\setbox\notebox=
\hbox{\box\leftbox\setstem\box\rightbox\box\dotbox}%
\setchordakzent
\box\hunkbox\kern\smkern\u@text\l@text\box\notebox\chordfalse\endgroup}
\def\chordnobeam{\relax\ifstemup \stemupeval of \maxpitch
\else \stemdowneval of \minpitch\fi
\ifgroup\ifstemup\chordlowerstartpoints
\else\chordupperstartpoints\fi
\fi}
% *********************************************************** %
% * Tonarten und Aufloesung, Notenschluessel und Taktangabe * %
% *********************************************************** %
%\discretionary{vor}{nach}{kein}
\def\change{\edef\-{\noexpand\discretionary{}%vor
{\noexpand\hbox{\noexpand\lines}%
\noexpand\hbox{\the\cleftoks\the\signtoks}%
\noexpand\kern\noexpand\seminhw}%nach
{}}}%kein
\def\signchange{\change\gluebrule\discretionary{%
\hbox{\doppelstrich\set@rulesk\the\canceltoks\the\signtoks\set@rulesk
}}{\hbox{\lines\the\cleftoks\the\signtoks}\kern\seminhw}{%
\hbox{\doppelstrich\set@rulesk\the\canceltoks\the\signtoks}}%
\set@rulesk}
\def\clefchange{\change\setbox\hunkbox=\hbox{\unhbox\hunkbox%
\kern\p@{{\let\music=\smallmusic\the\cleftoks}}}}
%Taktangabe
\def\meter#1/#2{\nobreak\gluebmeter\discretionary{%
\hbox{\place4{#1}\kern-\wd\placebox\place0{#2}}\kern\seminhw
}{\hbox{\lines\the\cleftoks\the\signtoks\set@rulesk
\hbox{\place4{#1}\kern-\wd\placebox\place0{#2}}}\kern0.25\seminhw}%
{\hbox{\place4{#1}\kern-\wd\placebox\place0{#2}%
\kern0.5\seminhw}}\set@rulesk}
% \kern\seminhw}}\set@rulesk}
\def\place#1#2{\setbox\placebox\hbox{\rm#2}$\raise#1.5\seminhh\hbox{\copy
\placebox}$}
%Vorzeichnung
\def\signature#1#2{\global\signtoks={#1\kern\nhw}%
\iffirst\change\box\hunkbox\the\signtoks\set@rulesk
\else\signchange\fi\global\canceltoks={#2}}
%Notenschluessel
\def\clef#1#2{\global\clefcount=#1
\global\cleftoks={\setkey{#2}\kern\seminhw}%
\clefchange}
%Abkuerzungen fuer Vorzeichnungen - gro\3e Buchstaben =Dur-Tonarten
% kleine Buchstaben =Moll-Tonarten
\def\F{\signature{\b@4}{\n@4}}
\def\B{\signature{\b@4\b@7}{\n@4\n@7}}
\def\Es{\signature{\b@4\b@7\b@3}{\n@4\n@7\n@3}}
\def\As{\signature{\b@4\b@7\b@3\b@6}{\n@4\n@7\n@3\n@6}}
\def\Des{\signature{\b@4\b@7\b@3\b@6\b@2}{\n@4\n@7\n@3\n@6\n@2}}
\def\Ges{\signature{\b@4\b@7\b@3\b@6\b@2\b@5}{\n@4\n@7\n@3\n@5\n@2\n@5}}
\def\Ces{\signature{\b@4\b@7\b@3\b@6\b@2\b@5\b@1}%
{\n@4\n@7\n@3\n@5\n@2\n@5\n@1}}
\def\C{\signature{}{}}
\def\G{\signature{\x@8}{\n@8}}
\def\D{\signature{\x@8\x@5}{\n@8\x@5}}
\def\A{\signature{\x@8\x@5\x@9}{\n@8\n@5\n@9}}
\def\E{\signature{\x@8\x@5\x@9\x@6}{\n@8\n@5\n@9\n@6}}
\def\H{\signature{\x@8\x@5\x@9\x@6\x@3}{\n@8\n@5\n@9\n@6\n@3}}
\def\Fis{\signature{\x@8\x@5\x@9\x@6\x@3\x@4}{\n@8\n@5\n@9\n@6\n@3\n@4}}
\let\mdis=\F \let\ma=\C
\let\mgis=\H \let\md=\F
\let\mcis=\E \let\mg=\B
\let\mfis=\A \let\mc=\Es
\let\mh=\D \let\mf=\As
\let\me=\G \let\mb=\Des
\let\mes=\Ges
%Notenschluessel
\def\setkey#1{\hbox{\music#1}}
\def\vio{\clef{0}{\mviolin}}
\def\viooct{\clef{0}{\mviolinoct}}% noch nicht im Font
\def\vioOct{\clef{0}{\mviolinOct}} % noch nicht im Font
\def\bass{\clef{-2}{\mbass}}
\def\bassoct{\clef{-2}{\mbassoct}} %noch nicht im Font
\def\bassOct{\clef{-2}{\mbassOct}} %noch nicht im Font
\def\bariton{\clef{3}{\mbariton}}
\def\tenor{\clef{1}{\mtenor}}
\def\alto{\clef{-1}{\malt}}
\def\mezzosopran{\clef{-3}{\mmezzosopran}}
\def\sopran{\clef{-5}{\msopran}}
% ************************************************** %
% * Die Verarbeitung der Nachbarschaften * %
% ************************************************** %
\mathsurround=\z@
% ************************************************** %
% * Initialisierung der Listen einer Notengruppe * %
% ************************************************** %
%Gruppe belegt die notwendigen Listen fuer die Notengruppe
\def\group#1#2{\grouptrue
\global\oldskip=\sk
\let\u@@text = \u@text
\let\l@@text = \l@text
\global\setbox\neighborhood=\null
\gdef\elementlist{#1}\gdef\pitchlist{#2}%
\gdef\H@list{}\gdef\stemlist{}%
\gdef\uslurlist{}\gdef\lslurlist{}%
\gdef\H@corlist{}%
\gdef\dir@list{}%
\global\sl@c=\z@
\global\S=0
\N=0
\long\def\\##1{%
\global\E@l=\z@\global\E@u=\z@%zuruecksetzen auf 0pt
\global\setbox\neighborhood=\hbox{\unhbox\neighborhood##1}%
\rightappend0pt\to\stemlist %initialisiert \stemlist
\expandafter\rightappend\the\wd\neighborhood\to\H@list%belegt \H@list
\expandafter\rightappend\the\E@u\to\uslurlist
%belegt obere startpunkte fuer slurs
\expandafter\rightappend\the\E@l\to\lslurlist
%belegt untere startpunkte fuer slurs
\expandafter\rightappend\the\H@a@cor\to\H@corlist
%initialisiert \H@corlist
\global\H@a@cor=\z@%zuruecksetzen auf 0pt
\expandafter\rightappend\the\d@rection\to\dir@list
%initialisiert \dir@list
\advance\N1 }\elementlist\groupfalse
}
% ************************************************** %
% * Abarbeitung & Setzen einer Notengruppe * %
% ************************************************** %
\def\go{%
\let\u@text=\u@@text
\let\l@text=\l@@text
\m@ii=0 \long\def\\##1{\advance\m@ii 1
{\assign\m@ii\of\stemlist\to\stemlength}%
\ifdim\stemlength=\z@\beamfalse\else\beamtrue\fi##1}%
\global\sk=\oldskip
\sethunkglue\hbox{\global\sk=\z@skip\elementlist}\nobreak
\beamfalse}
% ************************************************** %
% * Verbalkung - Eingabemacros * %
% ************************************************** %
% Eingabemacros - Balken oberhalb - Balken unterhalb der Notengruppe
\def\ubeam#1#2{\stemuptrue \n@a=#1 \n@e=#2 \direction{up}%
\putdir{up}\from\n@a\to\n@e\b@@m}
%
\def\lbeam#1#2{\stemupfalse \n@a=#1 \n@e=#2 \direction{down}%
\putdir{down}\from\n@a\to\n@e\b@@m}
%
\def\b@@m{%
%Initialisierung
\additem{\noexpand\direction{\the\direction}}{}\in\elementlist\at\n@a
\ifnum\n@e>\N \n@e=\N\fi
\global\minsl=2\nhh
\assign\n@a\of\pitchlist\to\P@a
\assign\n@e\of\pitchlist\to\P@e
\assign\n@e\of\H@list\to\H@e
\assign\n@a\of\H@list\to\H@a
\select\n@a\of\dir@list\to\dir@i
\lokalassign\n@a\of\H@corlist\to\hd@i % vorne verkuerzt
\ifx\dir@i\down@\advance\hd@i \nhw \fi
\global\advance\H@a by-\hd@i
\lokalassign\n@e\of\H@corlist\to\hd@i % und hinten verkuerzt
\select\n@e\of\dir@list\to\dir@i
\ifx\dir@i\down@\advance\hd@i \nhw \fi
\global\advance\H@e by-\hd@i
\global\advance\H@e by-\H@a
%Berechnung der Steigung
\csname gradient\the\direction\endcsname%
%Anpassung der Notenhaelse
\csname calstems\the\direction\endcsname%
%Positionierung des Balkens
\beaming
%Addieren der berechneten Halsl"angenkorrektur in der \stemlist
\addslc\in\stemlist\from\n@a\to\n@e
\global\advance\sl@c \seminhh
%Korrektur der Bogenangfangspunkte oberhalb bzw. unterhalb der Noten
\ifstemup\relax
\addslc\in\uslurlist\from\n@a\to\n@e
\else \relax\global\sl@c=-\sl@c
\addslc\in\lslurlist\from\n@a\to\n@e
\global\sl@c=-\sl@c
\fi
\global\sl@c=\z@
}
% ************************************************** %
% * Berechnungen der Halslaengen und Steigung * %
% ************************************************** %
\def\gradientup{\gradient{<}{+}}
\def\gradientdown{\gradient{>}{-}}
\def\gradient#1#2{%
\R@a=\P@a\seminhh
\R@e=\P@e\seminhh
%jetzt erst die Stemhoehe berechnen.
\ifstemup \stemupeval of \P@a \s@a=\stemlength
\stemupeval of \P@e \s@e=\stemlength
\else \stemdowneval of \P@a \s@a=\stemlength
\stemdowneval of \P@e \s@e=\stemlength
\fi
\global\E@a=\R@a \global\advance \E@a by#2\s@a
\global\E@e=\R@e \global\advance \E@e by#2\s@e
\ifnum\P@a=\P@e \global\S=0
\else\global\flagc=1
\ifnum\P@a#1\P@e \gradz@\in\pitchlist\with#1\the\P@e\from\n@a\to\n@e
\else \gradz@\in\pitchlist\with#1\the\P@a\from\n@a\to\n@e\fi
\ifnum\flagc=0 \global\S=0\else \global\S=1\fi
\fi
\relax
\ifnum\S = 0 \relax
\ifdim\E@a#1\E@e \global\E@a=\E@e \s@a=#2\E@a \advance\s@a-#2\R@a \fi
\else
\distance\E@a\E@e
\ifdim\Abs=\z@\relax
\ifnum\P@e#1\P@a \corrc\s@a
\global\E@a=\R@a\global\advance\E@a by#2\s@a\relax
\else \corrc\s@e
\global\E@e=\R@e\global\advance\E@e by#2\s@e\relax\fi
\fi
\distance\E@a\E@e
\limit=0.45 \H@e
\ifdim\limit>4\nhh \limit=4\nhh \fi
\hd@i=\Abs\advance\hd@i by -\limit \corr=\hd@i
\ifdim\corr>\z@\relax
\ifnum\P@a#1\P@e \corrb\s@a
\global\E@a=\R@a\global\advance\E@a by#2\s@a\relax
\else\corrb\s@e\global\E@e=\R@e\global\advance\E@e by#2\s@e\fi
\Abs=\corr
\fi
\ifnum\P@a>\P@e\global\S=-\Abs\else\global\S=\Abs\fi
\global\multiply\S by 100 \global\divide\S by \H@e
\fi %von P@a=Pb Abfrage
%\s@a und \s@e zurueckpacken an \n@a-te bzw. \N-te Stelle der \stemlist
\expandafter\exchange\the\s@a\in\stemlist\at\n@a
\expandafter\exchange\the\s@e\in\stemlist\at\n@e
\whatisnewstartpoint
\assignS}
%
\def\calstemsup{\calstems{+}}
\def\calstemsdown{\calstems{-}}
\def\calstems#1{%
\n@i=\n@a
\global\sl@c=\z@
\EP@=\E@a
\loop\advance\n@i by 1
\assign\n@i\of\pitchlist\to\P@i
\R@i=\P@i\seminhh
\getendpoint\n@i\EP@i
\s@i=\EP@i
\advance\s@i by-\R@i %Laenge des stems
\s@i=#1\s@i
\expandafter\exchange\the\s@i\in\stemlist\at\n@i
\whatarenewstartpoints
\ifdim\s@i<\minsl\relax
\ifdim\s@i<\z@ \s@i=-\s@i\advance\s@i by \minsl
\else\s@i=\R@i\advance\s@i by #1\minsl\advance\s@i by-\EP@i\s@i=#1\s@i\fi
\ifdim\s@i>\sl@c\relax\global\sl@c=\s@i\fi
\fi
\ifnum\n@i<\n@e \repeat
}
%
%Auswertung der \beamlist
\def\evalbeamlist#1-#2,#3#{\def\aa{#1}\def\bb{#2}%
\ifx\aa\empty\m@a=0\else\m@a=#1\fi
\ifx\bb\empty\m@e=\m@a\else\m@e=#2\fi\def\nxt{#3}%
\ifnum\m@a<0\m@a=0\fi %belegung von m@a und m@e, so dass in
\ifnum\m@a>\N\m@a=\N\fi %createbeam keine schwierigkeiten auftauchen
\ifnum\m@e<1\m@e=1\fi %koennen, z.B. bei \assign usw.
\ifnum\m@e>\N\m@e=\N\fi %0<=\m@a<=\N; 1<=\m@e<=\N
\ifnum\m@e<\m@a\hc@i=\m@a\m@a=\m@e\m@e=\hc@i\fi
}
%
\def\beamposition{%
\assign\m@a\of\H@list\to\H@m@a
\assign\m@a\of\H@corlist\to\H@a@cor
\select\m@a\of\dir@list\to\dir@i
\relax\ifx\dir@i\down@ \global\advance\H@a@cor \nhw \fi
\global\advance\H@m@a by -\H@a@cor
\V@a=\H@m@a
\advance\V@a-\H@a
\multiply\V@a by\S \V@a=0.01\V@a
\ifstemup \advance \V@a by \sl@c \relax
\else \advance \V@a by-\sl@c
\fi
\advance\V@a by \EP@
\ifstemup\ifnum\S<0 \relax
\else \advance \V@a-\beamthickness \fi
\else
\ifnum\S<0 \advance\V@a \beamthickness\fi
\fi
\ifstemup
\advance\V@a by-\beamrow\nhh%zur Platzierung der Balken
\else
\advance\V@a by \beamrow\nhh%zur Platzierung der Balken
\fi
}
\def\createbeam{%
\looop\expandafter\evalbeamlist\nxt{}%
\ifnum\m@a>0\beamposition
\ifnum\m@e=\m@a\relax
%% \immediate\write0{rrule \the\S}%
\additem{}{\noexpand\beamr{\the\S}%
{\the\V@a}{\the\H@a@cor}}\in\elementlist\at\m@a
\else \lokalassign\m@e\of\H@list\to\hd@i
\lokalassign\m@e\of\H@corlist\to\hd@ii
\select\m@e\of\dir@list\to\dir@i
\relax\ifx\dir@i\down@ \advance\hd@ii\nhw \fi
\advance\hd@i by-\hd@ii
\advance\hd@i by-\H@m@a
%% \immediate\write0{rule \the\hd@i}%
\additem{}{\noexpand\beam{\the\S}%
{\the\hd@i}{\the\V@a}{\the\H@a@cor}}\in\elementlist\at\m@a
\fi
\else
\m@a=\m@e\beamposition
%% \immediate\write0{lrule \the\S}%
\additem{}{\noexpand\beaml{\the\S}%
{\the\V@a}{\the\H@a@cor}}\in\elementlist\at\m@a
\fi
\ifx\nxt\empty\relax\leave%
}
%
\def\beaming{\cardinality\beamlist\to\hc@i%
\ifnum\hc@i>2 \advance\hc@i-2 \global\advance\sl@c by\hc@i\seminhh\fi
\global\beamrow0
\def\\##1{{\def\nxt{##1}\relax\createbeam\global\advance\beamrow 1%
}}\beamlist}
% ************************************************** %
% * Plazierung und Zusammensetzung der Balken * %
% ************************************************** %
\def\beam#1#2#3#4{\global\S=#1\global\L@a=#2%
$\raise#3\hbox to \z@{\kern-#4\drawbeam\hss}$}
\def\beamr#1#2#3{\global\S=#1%
$\raise#2\hbox to\z@{\kern-#3\drawbe@m\hss}$}
\def\beaml#1#2#3{\global\S=#1$\raise#2\hbox to\z@{\hss
\drawb@@m\ifstemup\else\kern\nhw\fi}$}
%
\def\putintovbox#1{%
\ifstemup
\ifnum\S>0 \vb@@{#1}\else \vt@@{#1}\fi
\else
\ifnum\S<0 \vt@@{#1}\else \vb@@{#1}\fi
\fi}
\def\putintovb@x#1{%
\ifstemup
\ifnum\S<0 \vt@@{#1}\else \vb@@{#1}\fi
\else
\ifnum\S<0 \vb@@{#1}\else\vt@@{#1}\fi
\fi}
%
\def\makebeam{\loop
\ifodd\L@
$\raise\SHIFT\hbox{\beamfont\char\the\CODE}$%
\advance\SHIFT by \l@\gradfactor
\fi
\divide\L@ 2 \addC1 \multiply\l@2
\ifnum\L@>0\repeat}
%
\def\drawbeam{%
{\gradfactor=\S\p@ \gradfactor = 0.005 \gradfactor
\ifnum\S=0
\hbox{\vrule height \beamthickness depth\z@ width\L@a}%
\else\l@=1\assignCODE
\L@=\L@a
\advance \L@ by 32677%um Rundungsfehler zu vermeiden
\divide\L@ by 32678%Genauigkeit 0.5pt
\SHIFT=\z@
\putintovbox{\beamfont \ifnum \L@ >255 \setlongbeams\fi \makebeam}%
\fi}}
\def\setlongbeams{\relax\hc@i=\CODE \advance\hc@i 7%
\loop$\raise\SHIFT\hbox{\char\the\hc@i}$%
\advance\SHIFT 128 \gradfactor \advance\L@-255
\ifnum \L@>255 \repeat}
%
\def\drawbe@m{%
\ifnum\S=0\hbox{\vrule height \beamthickness depth \z@ width\nhh}%
\else\assignCODE\addC3\putintovbox{\beamfont\char\the\CODE}\fi}
\def\drawb@@m{%
\ifnum\S=0\hbox{\vrule height \beamthickness depth \z@ width\nhh}%
\else\assignCODE\addC3\putintovb@x{\beamfont\char\the\CODE}\fi}
% ************************************************** %
% * Die Bogen * %
% ************************************************** %
%-Eingabemacros - Bogen oberhalb - Bogen unterhalb der Notengruppe
\def\uslur#1#2{\n@a=#1\n@e=#2%
%Initialisierung
\inislur
\assign\n@a\of\uslurlist\to\E@a
\assign\n@e\of\uslurlist\to\E@e
\assignflags
%Berechnung der entgueltigen Bogenbreite
%Belegung des Anfangs- und Endpunktes des Bogens
%Berechnung des horizontalen Versatzes des Bogens
\ifdim\s@a=\z@ \ifdim\s@e=\z@ \u@nobeaming \else \u@rightbeaming \fi
\else \ifdim\s@e=\z@ \u@leftbeaming \else\u@leftrightbeaming\fi
\fi
%Berechnung der Laenge des Bogens
\intslurwidth
%Berechnung der Sekantensteigung
\gradientslur{<}{-}%
%Positionierung des Bogens
\ifnum\slurwidth > 17 \caluphrase
\else
\assignuslurchar
\ifnum\V@int=0\setslurs{2}{0}\else
\ifdim\V@<\z@\setslurs{0}{-1}\else\setslurs{0}{+1}\fi\fi
\fi
}
\def\lslur#1#2{\n@a=#1\n@e=#2%
%Initialisierung
\inislur
\assign\n@a\of\lslurlist\to\E@a
\assign\n@e\of\lslurlist\to\E@e
\assignflags
%Berechnung der entgueltigen Bogenbreite
%Belegung des Anfangs- und Endpunktes des Bogens
%Berechnung des horizontalen Versatzes des Bogens
\ifdim\s@a=\z@ \ifdim\s@e=\z@ \l@nobeaming \else \l@rightbeaming \fi
\else \ifdim\s@e=\z@ \l@leftbeaming \else\l@leftrightbeaming\fi
\fi
%Berechnung der Laenge des Bogens
\intslurwidth
%Berechnung der Sekantensteigung
\gradientslur{>}{+}%
%Positionierung des Bogens
\ifnum\slurwidth > 17 \callphrase
\else
\assignlslurchar
\ifnum\V@int=0\setslurs{3}{0}\else
\ifdim\V@<\z@\setslurs{1}{-1}\else\setslurs{1}{+1}\fi\fi
\fi
}
%
\def\intslurwidth{%
%\slurwidth*\nhw <= \H@e < (\slurwidth+1)*\nhw
\slurwidth=\H@e
\advance\slurwidth \seminhw
\divide\slurwidth by \nhw
\ifnum\slurwidth< 1 \slurwidth= 1 \fi}
%Hilfsfunktionen
\def\newslurwidth#1#2{%
\ifcase#1 \global\advance\H@e #2\nhw
\or \global\advance\H@e #2\seminhw \fi}
\def\calslurwidth{\global\advance\H@e-\H@e@cor
\global\advance\H@a-\H@a@cor
\global\advance\H@e-\H@a\relax}
\def\calslurcor#1{\slurcor=\H@a@cor \advance\slurcor #1\seminhw
\slurcor = -\slurcor}
\def\newE@a#1{\ifnum\flaga=0 \global\E@a=\P@a\seminhh
\global\advance\E@a#1\nhh \fi}
\def\newE@e#1{\ifnum\flagb=0 \global\E@e=\P@e\seminhh
\global\advance\E@e#1\nhh \fi}
\def\inislur{\relax
\ifnum\n@e>\N \n@e=\N\fi
\ifnum\n@a<1 \n@a= 1\fi
\ifnum\n@a>\n@e\n@e=\hc@i \n@e=\n@a \n@a=\hc@i\fi
%
\assign\n@e\of\H@list\to\H@e
\lokalassign\n@e\of\H@corlist\to\H@e@cor
\assign\n@a\of\H@list\to\H@a
\assign\n@a\of\H@corlist\to\H@a@cor
\select\n@a\of\dir@list\to\dir@a
\select\n@e\of\dir@list\to\dir@e
\ifx\dir@a\down@ \global\advance\H@a@cor \nhw \fi
\ifx\dir@e\down@ \advance\H@e@cor \nhw \fi
%
\assign\n@e\of\pitchlist\to\P@e
\assign\n@a\of\pitchlist\to\P@a
\lokalassign\n@e\of\stemlist\to\s@e
\lokalassign\n@a\of\stemlist\to\s@a
}
\def\assignflags{%
\flaga=2 \ifdim \E@a=\z@ \flaga=0 \fi
\ifdim\E@a> \I@@ \flaga=1 \global\advance \E@a-\I@@\fi
\ifdim\E@a<-\I@@ \flaga=1 \global\advance \E@a-\I@@\fi
\flagb=2\ifdim \E@e =\z@ \flagb=0\fi
\ifdim\E@e> \I@@ \flagb=1 \global\advance \E@e-\I@@\fi
\ifdim\E@e<-\I@@ \flagb=1 \global\advance \E@e \I@@\fi
\relax}
%
%ohne Verbalkung
\def\u@nobeaming{\calslurwidth
\ifx\dir@e\up@ \relax\newslurwidth{0}{-}\fi %stemup
\calslurcor{-}\newE@a{+}\newE@e{+}}
%
\def\l@nobeaming{\calslurwidth
\ifx\dir@a\down@ \newslurwidth{0}{-}\fi%stemdown
\ifx\dir@a\up@\calslurcor{+}\else \calslurcor{-}\fi
\newE@a{-}\newE@e{-}}
% Verbalkung nur in \n@e
\def\u@rightbeaming{\ifnum\flagb<2 \u@rightstemdown \else
\u@rightstemup \fi}
\def\u@rightstemdown{\calslurwidth
\calslurcor{-}\newE@a{+}\newE@e{+}}
\def\u@rightstemup{\calslurwidth
\advance\n@e-1
\ifnum\n@e=\n@a \newslurwidth{0}{-}\calslurcor{-}\newE@a{+}\newE@e{+}%
\else\newslurwidth{1}{-}\calslurcor{-}\newE@a{+}%\E@e belegt
\fi\advance\n@e1}
%
\def\l@rightbeaming{\ifnum\flagb<2 \l@rightstemup \else
\l@rightstemdown \fi}
\def\l@rightstemup{\calslurwidth
\ifx\dir@a\down@ \newslurwidth{0}{-}\fi
\ifx\dir@a\up@\calslurcor{+}\else\calslurcor{-}\fi\newE@a{-}\newE@e{-}}
\def\l@rightstemdown{\calslurwidth
\advance\n@e-1
\ifnum\n@e=\n@a \ifx\dir@a\up@\newslurwidth{0}{-}\fi
\ifx\dir@a\up@\calslurcor{+}\else\calslurcor{-}\fi\newE@a{-}\newE@e{-}%
\else\ifx\dir@a\up@\newslurwidth{1}{+}\else\newslurwidth{1}{-}\fi
\ifx\dir@a\up@\calslurcor{+}\else\calslurcor{-}\fi\newE@a{-}%\E@e belegt
\fi\advance\n@e 1 }
%
% Verbalkung nur in \n@a
\def\u@leftbeaming{\ifnum\flaga<2 \u@leftstemdown \else
\u@leftstemup \fi}
\def\u@leftstemdown{\calslurwidth
\ifx\dir@e\up@\newslurwidth{0}{-}\fi
\calslurcor{-}\newE@a{+}\newE@e{+}}
\def\u@leftstemup{\calslurwidth
\advance\n@e-1
\ifnum\n@e=\n@a \ifx\dir@e\up@\newslurwidth{0}{-}\fi
\calslurcor{-}\newE@a{+}\newE@e{+}%
\else\ifx\dir@e\up@\newslurwidth{1}{-}\else\newslurwidth{1}{+}\fi
\slurcor=-\H@a@cor \newE@e{+}%\E@a belegt
\fi\advance\n@e1}
%
\def\l@leftbeaming{\ifnum\flaga<2 \l@leftstemup \else
\l@leftstemdown \fi}
\def\l@leftstemup{\calslurwidth
\calslurcor{+}\newE@a{-}\newE@e{-}}
\def\l@leftstemdown{\calslurwidth
\advance\n@e-1
\ifnum\n@e=\n@a \newslurwidth{0}{-}\calslurcor{-}\newE@a{-}\newE@e{-}%
\else\newslurwidth{1}{-}\slurcor=-\H@a@cor\newE@e{-}%\E@a belegt
\fi\advance\n@e 1 }
%
% Verbalkung in beiden Faellen
\def\u@leftrightbeaming{\ifnum\flagb<2 \u@stemdown \else \u@stemup \fi}
\def\u@stemdown{%
\ifnum\flaga<2 \u@stemdownstemdown \else \u@stemupstemdown \fi}
\def\u@stemdownstemdown{\calslurwidth
\calslurcor{-}\newE@a{+}\newE@e{+}}
\def\u@stemupstemdown{\calslurwidth
\advance\n@e-1
\ifnum\n@e=\n@a \calslurcor{-}\newE@a{+}\newE@e{+}%
\else\newslurwidth{1}{-}\slurcor=-\H@a@cor\newE@e{+}%\E@a belegt
\fi\advance\n@e 1 }
\def\u@stemup{%
\ifnum\flaga<2 \u@stemdownstemup \else \u@stemupstemup \fi}
\def\u@stemdownstemup{\calslurwidth
\advance\n@e-1
\ifnum\n@e=\n@a \newslurwidth{0}{-}\calslurcor{-}\newE@a{+}\newE@e{+}%
\else\newslurwidth{1}{-}\calslurcor{-}\newE@a{+}%\E@e belegt
\fi\advance\n@e 1 }
\def\u@stemupstemup{\calslurwidth
\slurcor=-\H@a@cor}%E@a,E@e belegt
%
\def\l@leftrightbeaming{\ifnum\flaga<2 \l@stemup \else \l@stemdown \fi}
\def\l@stemup{%
\ifnum\flagb<2 \l@stemupstemup \else \l@stemupstemdown \fi}
\def\l@stemupstemup{\calslurwidth
\calslurcor{+}\newE@a{-}\newE@e{-}}
\def\l@stemupstemdown{\calslurwidth
\advance\n@e-1
\ifnum\n@e=\n@a \calslurcor{+}\newE@a{-}\newE@e{-}%
\else\newslurwidth{1}{+}\calslurcor{+}\newE@a{-}%\E@e belegt
\fi\advance\n@e 1 }
\def\l@stemdown{%
\ifnum\flagb<2 \l@stemdownstemup \else \l@stemdownstemdown \fi}
\def\l@stemdownstemup{\calslurwidth
\advance\n@e-1
\ifnum\n@e=\n@a \newslurwidth{0}{-}\calslurcor{+}\newE@a{-}\newE@e{-}%
\else\newslurwidth{1}{-}\slurcor=-\H@a@cor\newE@e{-}%\E@a belegt
\fi\advance\n@e 1 }
\def\l@stemdownstemdown{\calslurwidth\slurcor=-\H@a@cor}%E@a,E@e belegt
%
%Sekantensteigung
\def\gradientslur#1#2{%
\ifdim\E@a=\E@e \V@int=0 \V@=\z@%auswaehlen von angemessenen Boegen
\else
\V@ = \E@e \advance \V@ by -\E@a
\ifdim\V@>\z@ \V@int=\V@ \else \V@int=-\V@ \fi
\advance\V@int \V@int \advance\V@int \seminhh \divide \V@int by 2
\divide \V@int by \seminhh
\ifnum\V@int>8 \V@int=8 \else \ifnum\slurwidth<4
\hc@i=\slurwidth \multiply \hc@i2
\ifnum\hc@i<\V@int \V@int=\hc@i
\fi\fi
\fi
\hd@i=\V@int\seminhh
\ifdim\E@a#1\E@e \global\E@a=\E@e\global\advance\E@a#2\hd@i
\else \global\E@e=\E@a\global\advance\E@e#2\hd@i\fi
\fi
}
%
%Postitionierung und Bogensatz
\def\caluphrase{\ifnum\V@int=0
\caltie{0}{3}{+}\else \calphrase{<}{+}{0}\fi}
\def\callphrase{\ifnum\V@int=0
\caltie{1}{3}{-}\else \calphrase{>}{-}{1}\fi}
\def\caltie#1#2#3{\hd@i=\E@a \hd@ii=\tieconst\seminhh
\advance\hd@ii\nhh
\advance\hd@i #3\hd@ii
\additem{}{\noexpand\phrase{#1}{\the\H@e}%
{#2}{#2}{\the\hd@i}{\the\slurcor}}\in\elementlist\at\n@a}
\def\calphrase#1#2#3{%
\ifdim\V@#1 \z@
\hd@i=\phraseconst\seminhh \advance\hd@i\nhh
\global\advance\E@a#2\hd@i
\additem{}{\noexpand\phrase{#3}{\the\H@e}%
{0}{\the\V@int}{\the\E@a}{\the\slurcor}}\in\elementlist\at\n@a
% 0 entspr. slur aus der ersten spalte im font Sconst
\else
\hd@i=\phraseconst\seminhh \advance\hd@i\seminhh
\global\advance\E@a by #2\hd@i\relax
\hd@i=\V@int\seminhh
\global\advance\E@a by #2\hd@i \relax
\additem{}{\noexpand\phrase{#3}{\the\H@e}%
{\the\V@int}{0}{\the\E@a}{\the\slurcor}}\in\elementlist\at\n@a
% 0 entspr. slur aus der ersten spalte im font
\fi}
\def\phrase#1#2#3#4#5#6{\hc@i=#3\hc@ii=#4%
$\raise#5\hbox to \z@{{\kern#6%
\ifcase#1
\vt@@{\hbox to #2 {\slurfont
\vt@@{\char\hex2\the\hc@i}\r@lef@ill{\p@}\vt@@{\char\hex3\the\hc@ii}}}%
\or
\vb@@{\hbox to #2 {\slurfont
\vb@@{\char\hex4\the\hc@i}\r@lef@ll{\p@}\vb@@{\char\hex5\the\hc@ii}}}%
\fi
\hss}}$}
%
\def\setslurs#1#2{\additem{}{\noexpand\setslur{#2}{#1}%
{\the\E@a}{\the\slurcor}{\the\slurtoks}}\in\elementlist\at\n@a}
\def\setslur#1#2#3#4#5{\S@=#1\hc@i=#2%
$\raise#3\hbox to \z@{{\kern#4\relax
\ifnum\S@<0 \vt@@{\selectfont\char#5}\else
\vb@@{\selectfont\char#5}\fi
\hss}}$}
\def\selectfont{%
\ifcase\hc@i\ifnum\S@<0\slurfontdu\else\slurfontuu\fi%0
\or \ifnum\S@<0\slurfontdd\else\slurfontud\fi%1
\or \slurfont \or \slurfont \fi}
% ************************************************** %
% * Akzente fuer Noten und Akkorde * %
% ************************************************** %
%Abkuerzungen
\def\cantusfirmus{{\it c.f.}}
\def\crescendo{{\it cresc.}}
\def\dacapo{{\it d.c.}}
\def\dalsegno{{\it d.s.}}
\def\decrescendo{{\it decresc.}}
\def\diminuendo{{\it dim.}}
\def\fine{{\it fine}}
\def\forte{{\it f}}
\def\fortissimo{{\it ff}}
\def\fortissimoposs{{\it fff}}
\def\fortepiano{{\it fp}}
\def\forzato{{\it fz}}
\def\mezzoforte{{\it mf}}
\def\mezzopiano{{\it mp}}
\def\piano{{\it p}}
\def\pianissimo{{\it pp}}
\def\pianissimoposs{{\it ppp}}
\def\rallentando{{\it rall.}}
\def\rinforzando{{\it rfz.}}
\def\ritardando{{\it rit.}}
\def\ritenuto{{\it riten.}}
\def\sforzato{{\it sfz}}
\def\sforz{{\it sf}}
\def\staccato{{\it stacc.}}
\def\tacet{{\it tacet}}
\def\unisono{{\it unis.}}
%Plazierung der Spielanweisungen am Notenkopf
\def\noaccent{\setbox\akzentbox\null}
\def\stac{\setbox\akzentbox\hboxnhw{{\rm.}}{\box\akzentbox}}
\def\dec{{{\slurfont\char'160}}}
\def\staccatissimo{\setbox\akzentbox%
\hboxnhw{$\ssize\prime$}{\box\akzentbox}}
\def\tr{\setbox\akzentbox\hboxnhw{{\rm{\it tr}}}{\box\akzentbox}}
\def\trbrack{\setbox\akzentbox\hboxnhw{{\rm({\it tr})}}{\box\akzentbox}}
\def\tenuto{\setbox\akzentbox\hboxnhw{{\vrule width \nhh height 1pt}}
{\box\akzentbox}}
\def\plus{\setbox\akzentbox=
\hboxnhw{$\scriptscriptstyle+$}{\box\akzentbox}}
\def\setchordakzent{%
\ifdim\wd\akzentbox=\z@\relax\else
\iftwo \akzent@position \else
\ifstemup \l@akzent@position \else \u@akzent@position\fi \fi
\ifstemup\global\setbox\notebox=\hbox{$
\raise \akzent@pos\hbox to \z@{\copy\akzentbox\hss}$\box\notebox}\else
\global\setbox\notebox=\hbox{\box\notebox$
\raise \akzent@pos\hbox to\z@{\hss\copy\akzentbox}$}\fi\fi}
\def\setakzent{%
\ifdim\wd\akzentbox=\z@\relax\else
\iftwo \akzent@position \else
\ifstemup \l@akzent@position \else \u@akzent@position\fi \fi
\global\setbox\notebox=\hboxnhw{\box\notebox}{$
\raise \akzent@pos\hbox{\copy\akzentbox}$}\fi}
\def\u@akzent@position{\hc@i=\ht\notebox \divide\hc@i by \seminhh
\ifnum\hc@i>7 \advance\hc@i 1 \else
\ifodd\hc@i \advance \hc@i 2 \else \advance \hc@i 1\fi\fi
\akzent@pos = \hc@i\seminhh\relax
\ifgroup
\global\E@u=\akzent@pos \global\advance\E@u\ht\akzentbox
\global\advance\E@u\seminhh
\ifdim\E@u<\z@ \global\advance \E@u-\I@@
\else \global\advance \E@u \I@@ \fi\fi
}
\def\l@akzent@position{\hc@i=\dp\notebox \divide\hc@i by \seminhh
\ifdim\dp\notebox>\z@ \advance\hc@i 1 \akzent@pos= -\hc@i\seminhh
\else
\ifnum\pitch>2 \akzent@pos=\seminhh \else \akzent@pos=-\seminhh\fi\fi
\advance\akzent@pos-\ht\akzentbox
\ifgroup
\global\E@l=\akzent@pos \global\advance\E@l-\seminhh
\ifdim\E@l<\z@ \global\advance \E@l-\I@@
\else \global\advance \E@l \I@@ \fi\fi}
%varable (De-)Crescendo - Zeichen
\def\cresc#1{\sethunkglue\box\hunkbox\global\sk=0pt
\setbox\hb@i\hbox{#1}\hc@i=\wd\hb@i\divide\hc@i\nhw
\ifnum\hc@i < 1 \hc@i=1 \fi \ifnum\hc@i>16 \hc@i = 16\fi\advance\hc@i95
\setover{\slurfont\char\the\hc@i}{\overstrut\unhbox\hb@i}}
\def\decresc#1{\sethunkglue\box\hunkbox\global\sk=0pt
\setbox\hb@i\hbox{#1}\hc@i=\wd\hb@i\divide\hc@i\nhw
\ifnum\hc@i < 1 \hc@i=1 \fi \ifnum\hc@i>16 \hc@i=16 \fi\advance\hc@i111
\setover{\slurfont\char\the\hc@i}{\overstrut\unhbox\hb@i}}
\def\setover#1#2{\vbox{\offinterlineskip\hbox{#1}\hbox{#2}}}
% ************************************************** %
% * Textunterlage * %
% ************************************************** %
% Text oberhalb und unterhalb der Notenlinien
%- Eingabemacros
\def\^#1#{\set@above@parms{#1}\set@above@box}
\def\_#1#{\set@below@parms{#1}\set@below@box}
\def\a@tok{\^}\def\b@tok{\_}
%#1 n : Der Text soll nicht in die Berechnung einbezogen werden,
%#1 c : Der Text wird unterhalb der Notenbox zentriert und nicht in
% die weitere Berechnung einbezogen
%#1 l: (linksbuendig) aber neuer spaceskip festgesetzt, Box ist so breit
%wie Text.
%#1 r: (rechtsbuendig) Box ist so breit wie Notenbox + ihr spaceskip
%der Rest wird links ueberstehen. sk veraendert.
\def\set@above@parms#1{\def\aresp{#1}\ifx\aresp\empty \def\aresp{x}\fi
\overtext=\staffheight\advance\overtext by\nhh}
\def\set@below@parms#1{\def\bresp{#1}\ifx\bresp\empty \def\bresp{x}\fi
\undertext=\textline}
\def\set@above@box#1{\hs@iv=\sk\setbox\hb@i=\hbox{\global\sk=\z@skip
\strut\eightrm#1}\get@below@box}
\def\get@below@box#1#{\def\@B@{#1}\begingroup\aftergroup\set@below
\ifx\@B@\b@tok\relax %\aftergroup#2
\else\aftergroup e\aftergroup{\aftergroup}\fi
\endgroup}
\def\set@below#1#{\set@below@parms{#1}\set@boxes}
\def\set@boxes#1#2{\setbox\hb@ii=\hbox{\global\sk=\z@skip\strut\eightrm#1}%
\global\sk=\hs@iv \setbox\hb@iii\hbox{#2}%
\hs@v=\sk \relax\hs@vi=\sk
\above{\aresp}\below{\bresp}\global\sk=\hs@iv\relax
\ifvoid\hb@iii \global\sk=\z@skip \hbox{\u@text\l@text}\else #2\fi
\ifdim\hs@vi>\hs@v\global\sk=\hs@vi\else\global\sk=\hs@v\fi
\def\l@text{\relax}\def\u@text{\relax}}
%
\def\set@below@box#1{\hs@iv=\sk\setbox\hb@ii=\hbox{\global\sk=\z@skip
\strut\eightrm#1}\get@above@box}
\def\get@above@box#1#{\def\@A@{#1}\begingroup\aftergroup\set@above
\ifx\@A@\a@tok\relax%\aftergroup#2
\else\aftergroup e\aftergroup{\aftergroup}\fi\endgroup}
\def\set@above#1#{\set@above@parms{#1}\set@@boxes}
\def\set@@boxes#1#2{\setbox\hb@i=\hbox{\global\sk=\z@skip\strut\eightrm#1}%
\global\sk=\hs@iv \setbox\hb@iii\hbox{#2}%
\hs@v=\sk \relax\hs@vi=\sk
\above{\aresp}\below{\bresp}\global\sk=\hs@iv\relax
\ifvoid\hb@iii\global\sk=\z@skip\hbox{\u@text\l@text}\else#2\fi
\ifdim\hs@vi>\hs@v\global\sk=\hs@vi\else\global\sk=\hs@v\fi
\def\l@text{\relax}\def\u@text{\relax}}
\def\above#1{\ifdim\ht\hb@iii>\overtext \overtext = \ht\hb@iii
\advance \overtext \seminhh \fi
\if#1e\def\u@text{\relax}\else
\if#1n\anorespect\else
\if#1c\acrespect\else
\if#1r\arrespect\else
\if#1l\alrespect\else\aautoset\fi\fi\fi\fi\fi\nobreak}
\def\below#1{%
\if#1e\def\l@text{\relax}\else
\if#1n\bnorespect\else
\if#1c\bcrespect\else
\if#1r\brrespect\else
\if#1l\blrespect\else
\if#1v\bvrespect\else\bautoset\fi\fi\fi\fi\fi\fi\nobreak}
\def\anorespect{%
\def\u@text{$\raise\overtext\hbox to\z@{\box\hb@i\hss}$}}
\def\acrespect{\hd@i=\wd\hb@iii\advance\hd@i-\hs@iv\relax
\setbox\hb@i\hbox to\hd@i{\hss\box\hb@i\hss}%
\def\u@text{$\raise\overtext\hbox to \z@{\box\hb@i\hss}$}}
\def\arrespect{\hd@i=\wd\hb@iii
\advance\hd@i by \hs@v \advance\hd@i by-\hs@iv
\setbox\hb@i\hbox to \hd@i{\hss\box\hb@i}%
\def\u@text{$\raise\overtext\hbox to \z@{\box\hb@i\hss}$}%
\advance\hs@v by \nhh plus\nhh\relax}
\def\alrespect{\hd@i=\wd\hb@iii\advance\hd@i-\hs@iv
\distance{\hd@i}{\wd\hb@i}\ifdim\hd@i>\wd\hb@i
\hs@v=\Abs plus\nhh \fi
\def\u@text{$\raise\overtext\hbox to \z@{\box\hb@i\hss}$}}
\def\bnorespect{%
\def\l@text{$\lower\undertext\hbox to\z@{\box\hb@ii\hss}$}}
\def\bvrespect{\undertext=\ht\hb@ii\relax
\ifdim\dp\hb@iii>\z@ \advance\undertext by\dp\hb@iii\fi\bnorespect}
\def\bcrespect{%
\hd@i=\wd\hb@iii\advance\hd@i-\hs@iv\relax
\setbox\hb@ii\hbox to\hd@i{\hss\box\hb@ii\hss}%
\def\l@text{$\lower\undertext\hbox to \z@{\box\hb@ii\hss}$}}
\def\brrespect{\hd@i=\wd\hb@iii
\advance\hd@i by \hs@vi \advance\hd@i by-\hs@iv
\setbox\hb@ii\hbox to \hd@i{\hss\box\hb@ii}%
\def\l@text{$\lower\undertext\hbox to \z@{\box\hb@ii\hss}$}%
\advance\hs@vi by \nhh plus\nhh\relax}
\def\blrespect{\hd@i=\wd\hb@iii\advance\hd@i-\hs@iv
\distance{\hd@i}{\wd\hb@ii}\ifdim\hd@i>\wd\hb@i
\hs@vi=\Abs plus\nhh\relax \fi
\def\l@text{$\lower\undertext\hbox to \z@{\box\hb@ii\hss}$}}
\def\aautoset{\hd@i=\wd\hb@i \advance \hd@i-\wd\hb@iii
\advance\hd@i-\hs@iv
\ifdim\hd@i>\z@ \relax
\ifdim\hd@i>0.75\hs@v \advance\hd@i-\hs@v
\ifdim\hd@i<\hs@v \arrespect\else\alrespect\fi
\else\acrespect\fi
\else\anorespect\fi
}
\def\bautoset{\hd@i=\wd\hb@ii \advance\hd@i-\wd\hb@iii
\advance\hd@i-\hs@vi
\ifdim\hd@i>\z@ \relax
\ifdim\hd@i>\sk \advance\hd@i-\sk
\ifdim\hd@i<\sk \brrespect\else\blrespect\fi
\else\bcrespect\fi
\else\bnorespect\fi
}
% ************************************************** %
% * Zweistimmige Notation in einem System * %
% ************************************************** %
\def\two#1#2{{\def\stemdirectiondef{\relax}\twotrue
\setbox\h@nkbox=\hbox{\box\hunkbox}%
\hs@i=\sk \global\sk=\z@skip
\setbox\firstvoice\hbox{\stemuptrue
\let\akzent@position=\u@akzent@position\direction{up}#1}%
\hs@ii=\sk \global\sk=\z@skip
\setbox\secondvoice\hbox{%
\def\doteven{\dot@down}\let\akzent@position=\l@akzent@position
\stemupfalse\direction{down}#2}%
\hs@iii=\sk
\hbox{\global\sk=\hs@i\sethunkglue
\box\h@nkbox\ifdim\wd\firstvoice<\wd\secondvoice
\hd@i=\wd\firstvoice\global\sk=\z@skip\box\firstvoice\hskip-\hd@i
\global\sk=\z@skip\box\secondvoice\global\sk=\hs@iii\else
\hd@i=\wd\secondvoice\global\sk=\z@skip\box\secondvoice\hskip-\hd@i
\global\sk=\z@skip\box\firstvoice\global\sk=\hs@ii\fi}\twofalse}}
% ************************************************** %
% * Beginn und Ende * %
% ************************************************** %
%Material fuer die Ueberschrift eines Musikstueckes
\def\comp@{\hbox{}} %Komponist
\def\poet@{\hbox{}} % Texter
\def\title@{\hbox{}}% Titel
\def\voice@{\hbox{}}%Text zu Beginn der ersten Notenzeile
\def\composer#1{\def\comp@{\hbox{\eightrm #1}}}
\def\poet#1{\def\poet@{\hbox{\eightrm#1}}}
\def\title#1{\def\title@{\hbox{\bf#1}}}
\def\voice#1{\def\voice@{\hbox to \parindent{\offinterlineskip
\hss\vbox to \staffheight{\vfil\hbox{\rm#1}\vfil}\hss}}}
%Zusammensetzen der Ueberschrift
\def\headings{\par\hbox to \hsize{\hss\title@\hss}%
\hbox to \hsize {\poet@\hss\comp@}%
\def\comp@{\hbox{}}\def\poet@{\hbox{}}\def\title@{\hbox{}}}
%Rahmen \beginsong ...... \endsong
\outer\def\beginsong#1#2{\headings\par\nointerlineskip
\begingroup\inisong
\global\signtoks={}\global\cleftoks={}%
\noaccent
\baselines\parskip\staffheight plus 0.5\staffheight \relax
\firsttrue\indent\llap{\voice@}%
\firstlines#1#2\firstfalse\music}
\def\endsong{\break\null\par\endgroup\def\voice@{\hbox{}}\global\sk=0pt}
\outer\def\ende{\endsong\end}
% ************************************************** %
% * Defaults * %
% ************************************************** %
%Defaults zu Beginn des Musikstueckes
\def\inidefaults{\let\dotdown=\dot@down
\def\helplist{}%
\global\minsl=3 \nhh
\let\na=\n@a \let\nee=\n@e
\def\beamlist{\\{\the\n@a-\the\n@e,}}%
% Minimal moegliche Halslaenge bei Verbalkung - Anfangsbelegung
\n@a=1}
%Diese k"onnen nicht in \beginsong .... \endsong eingebettet werden
%da sonst keine Aenderung moeglich
\universal
\normalbaselines
\catcode`@ = 12
%\let\baselines = \baselinesa %fuer Einbettung einzeiliger Beispiele
%in Text
\let\baselines = \baselinesb %fuer mehrzeilige Beispiele
\rm